我在 macOS 的 Swift 3.2 项目中尝试使用 NSLinguisticTagger。
以下代码在 Swift 4 中运行良好
let tagger = NSLinguisticTagger(tagSchemes: [.nameType], options: 0) // 已编辑
但在 Swift 3.2 项目中会出现以下错误:
类型 ‘String’ 没有成员 ‘nameType’ // 已编辑
我在 Swift 3.2 项目中尝试按照旧的 NSLinguisticTagger 教程操作,但找不到 ‘.name’ 部分的替代方案。是否有办法修复这个问题,还是我必须将项目更新到 Swift 4?
NSHipster NSLinguisticTagger 2012 教程
回答:
首先,我需要道歉,因为我最初在没有确认我的设置是否真的正确的情况下写了一个答案。以下描述是基于我认为正确的设置更新的。(Xcode 9.2,目标 Swift 版本设置为 3.2。更改项目 Swift 版本不会影响目标 Swift 版本,哦,我的耻辱…)
当你想要使用旧版本的 Swift 时,一些 Swift 友好的包装类型不可用,API 和常量是从 Objective-C 世界以简单规则导入的。在这种情况下,你需要根据这些规则重新解释 Objective-C 版本的引用。
正如你在上面的链接文章中看到的,NSLinguisticTagScheme
只是 String
的类型别名,常量被命名为 NSLinguisticTagSchemeNameType
,如你问题链接中的文章所示。它们在旧版本的 Swift 中按原样导入。
因此,这在 Swift 3.2 中可以编译:
let tagger = NSLinguisticTagger(tagSchemes: [NSLinguisticTagSchemeNameType], options: 0)
(尽管如此,我强烈建议你升级到 Swift 4。因为苹果的官方参考资料是基于最新版本的 Swift,即 Swift 4。)