我正在尝试在 macOS 的 Swift 3.2 项目中使用 NSLinguisticTagger。
这段代码在 Swift 4 中运行良好
let tagger = NSLinguisticTagger(tagSchemes: [.nameType], options: 0) // edited
但是,给出错误:
Type 'String' has no member 'nameType' // edited
在 Swift 3.2 项目中。我尝试按照旧的 NSLinguisticTagger 教程进行操作,但找不到“.name”部分的替代品。是否可以解决此问题,或者我必须将项目更新为 Swift 4?
最佳答案
首先,我需要道歉,我在没有确认我的设置是否真的正确的情况下就写了一个答案。以下描述是根据我认为正确的设置更新的。 (Xcode 9.2,target Swift Version 设置为3.2。更改项目Swift Version 不会影响目标Swift Version,哦,我的耻辱...)
当你想使用旧的 Swift 版本时,一些 Swift 友好的包装器类型不可用,API 和常量是从 Objective-C 世界使用简单的规则导入的。在这种情况下,您需要根据这些规则重新解释 Objective-C 版本的引用。
正如您在上面的链接文章中看到的,NSLinguisticTagScheme
只是 String
的类型别名,常量被命名为 NSLinguisticTagSchemeNameType
您问题链接中的文章。它们在旧的 Swift 版本中按原样导入。
因此,在 Swift 3.2 中编译:
let tagger = NSLinguisticTagger(tagSchemes: [NSLinguisticTagSchemeNameType], options: 0)
(不过,我还是强烈建议你转移到 Swift 4。因为 Apple 的官方引用是基于最新版本的 Swift,所以它是 Swift 4。)
关于swift - 在 Swift 3.2 项目中实现 NSLinguisticTagger 时出现“无成员名称类型”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055117/