我有一个由iOS和OSX共享的类。升级到Swift 3之后,下面的代码行:
let textSize = ("999" as NSString).size(withAttributes: [NSFontAttributeName:labelFont!])
...导致iOS版本出现以下错误:
调用中的参数标签不正确(具有“withAttributes:”,预期为“属性:”)。
固定如下:
let textSize = ("999" as NSString).size(attributes: [NSFontAttributeName:labelFont!])
但是,然后OSX构建有错误:
调用中的参数标签不正确(具有“属性:”,预期为“withAttributes:”)
为什么在iOS和OSX构建中对NSString进行不同的处理?
(我已经使用扩展程序解决了这个问题。所有其他共享代码已成功转换为Swift3。)
最佳答案
NSString
大小调整主要是由于每种使用的测量方法而有所不同...(NSSize
v CGSize
):
OS X:
extension NSString {
@available(OSX 10.0, *)
open func size(withAttributes attrs: [String : Any]? = nil) -> NSSize
...
}
iOS:
extension NSString {
@available(iOS 7.0, *)
open func size(attributes attrs: [String : Any]? = nil) -> CGSize
...
}
除了使用
NSSize
的OS X和使用CGSize
的iOS外,它们具有非常相似的“大小”方法,除了前者使用AppKit
和后者使用UIKit
之外。
关于ios - 为什么Swift 3对OSX和iOS版本的NSString会有不同的对待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39763458/