Swift中的归因字符串:正确的方法

我们如何使可可少一些冗长,类型多一些安全。

当我在2001年晚些时候开始使用Cocoa时,我是从Java方面的经验和少量的纯C语言中学到的。Cocoa简直太了不起了(请查阅Ars Technica的这篇很酷的老文章),以及与旧Mac的区别。工具箱很大。
一个崭新的世界即将来临,我为所有机会提供了一个如此完整的,功能齐全的框架,这让我感到非常兴奋。

自从这些天以来,已经过去了很多年,古老的NeXT遗产是从iOS和UIKit继承而来的,我们也经历了移动革命,尤其是得益于完整的解决方案,该解决方案确实为我们所谓的应用经济创造了肥沃的环境( ,当然是在macOS上启动的。

使用Swift,就像时光倒流,再次体验相同的体验。 即使有这个新机会,UIKit(以及程度较小的AppKit)也正在经历向新生活的平稳过渡(虽然我的梦想是关于新的重写框架,但我可以理解选择平滑过渡的原因)。 Swift标准库中的基金会)。
因此,尽管我们仍在与这种过渡作斗争,但无论如何我们都可以使我们的生活更轻松。

NSAttributedString是我在后Swift时代开始讨厌的事情之一; 创建,组合样式并将其应用到字符串,然后将其渲染并不是一件困难的事情,但是它很无聊,冗长且令人讨厌。
就像不久前通过代码使用Auto Layout一样; 我们应该得到更好的体验,特别是现在我们正在使用Swift:我们可以使其变得类型安全,易于使用和简洁。

因此,从这种经验开始,我创建了一个名为SwiftRichString的小型库(原始名称,您认为不是吗?)。

类型安全

我要解决的第一个问题是关于类型安全的问题。 Swift实现类型安全 这基本上意味着您不能对变量的类型术语不恰当地使用它。 让开发环境强制执行类型安全是处理这些问题的最安全方法。
NSAttributedStrings使用NSDictionary设置文本属性; 属性标识符(作为字符串)及其值一起传递。
像那样:

为了使其更安全,我引入了样式的概念。 您可以使用名称创建样式(我们将在后面讨论),并使用传统的创建模式分配属性:

甚至font属性也是类型安全的; 您可以通过指定iOS提供的一种字体,以类型安全的方式创建UIFont对象。 FontAttribute也可以扩展,您可以添加自己的字体名称(或者,如果您很懒,可以通过指定文字以旧的方式实例化字体)。 通过查看库,您会发现其他一些特殊的结构,例如StrikeAttribute,ShadowAttribute或UnderlineAttribute。 所有这些都用于使事情变得更清洁,更快捷地使用(请查看文档以获取完整列表)。

样式的理想方案是创建将在下一个应用程序的代码中使用的一组样式。

只有一种特殊的样式称为.default。 无论将默认样式传递给函数的styles参数的顺序如何,默认样式都将首先应用。 这样可以确保您的字符串具有基本的通用样式,并可以在其上轻松添加一个或多个属性。

如果您不需要在代码中使用带标签的字符串,则可以创建Style对象而无需给它们命名。 只需在set()函数中使用它即可。

无痛属性字符串的创建和管理

创建NSAttributedString,将它们结合起来并应用样式既乏味又冗长; 大量无聊的代码使完成一项相当容易的任务。
让我向您展示一个非常简单的示例。

文章继续对我不利。
点击此处以继续阅读!