使用未声明的类型“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”的主要内容,如果未能解决你的问题,请参考以下文章

ios富文本的简单使用 AttributedString

使用未声明类型的 UITextfield

Alamofire,使用未声明的类型

使用未声明的类型“CostumTableViewCell”

使用未声明的类型“UIViewController”

Objective-C 库的 Swift “使用未声明的类型”