使用未声明的类型“AttributedString”
Posted
技术标签:
【中文标题】使用未声明的类型“AttributedString”【英文标题】:Use of undeclared type 'AttributedString' 【发布时间】:2016-08-02 02:14:18 【问题描述】:Xcode 8 beta 4 不再识别 Foundation 类 AttributedString
。
我在这个简单的游乐场示例中复制了它:
//: Playground - noun: a place where people can play
import Foundation
let attrStr1 = NSAttributedString()
let attrStr2 = AttributedString() // Use of undeclared type 'AttributedString'
由于 AttributedString
在较旧的 Xcode 8 Swift 3 测试版中可用,我想这是一个需要修复的 Foundation
错误,而不是 Playground 中的一些源代码错误?
【问题讨论】:
我不认为这是一个错误。我认为他们将命名更改从 NSAttributeString->AttributedString 反转回使用前缀。大概是为了在 Foundation 中保持 NS 前缀一致。总的来说,beta 4 中的命名变化比我预期的要多得多。大多数是显而易见的,有些则比较棘手。 @MattWeinecke 和@PetahChristian:如果属实,来自 Apple 的有趣逆转。不过,我在 Xcode 8 Beta 4 发行说明中找不到任何提及。我个人欢迎NS
前缀。因为现在要记住的东西太多了:Data
是一个结构,而NSData
是一个类;与URL
等相同。
我认为这很奇怪,例如 AttributedString 删除了前缀但没有删除 NSMutableAttributedString。
我这里测试过,需要用到NSAttributedString。我的项目甚至没有使用 AttributedString 编译。
找到SE-0086@LeoDabus中解释的原因。
【参考方案1】:
尽管 Xcode 发行说明中没有记录,但 Swift 进化提案 SE-0086 Drop NS Prefix in Swift Foundation 的第 2 版更新已将“NS”前缀添加回之前删除前缀的几个 Foundation 类。
原因如下:
如果该类计划在不久的将来具有等效的值类型,则保留 NS 前缀。示例:NSAttributedString、NSRegularExpression、NSPredicate。
因此,Swift AttributedString
类型将在 some 点返回,作为一个结构,而不是一个类。
听起来其中一些改进将成为“Swift 4 的重点领域”。现在,有必要恢复使用NSAttributedString
类。
如果您想知道有多少类型受到 SE-0086 v2 更新的影响,看起来 revision 影响了大约 32 种类型,这些类型之前已为 Swift 3 删除了 NS 前缀。 em>
【讨论】:
以上是关于使用未声明的类型“AttributedString”的主要内容,如果未能解决你的问题,请参考以下文章