为什么Swift 3对OSX与iOS构建的处理方式不同?

时间:2016-09-29 06:58:13

标签: ios macos nsstring swift3

我有一个由iOS和OSX共享的类。升级到Swift 3后,代码如下:

let textSize = ("999" as NSString).size(withAttributes: [NSFontAttributeName:labelFont!])

...导致iOS版本出现以下错误:

调用中的参数标签不正确(具有'withAttributes:',expected'属性:')。

修正如下:

let textSize = ("999" as NSString).size(attributes: [NSFontAttributeName:labelFont!])

但是OSX版本有错误:

调用中的参数标签不正确(具有'属性:',期望'withAttributes:')

为什么NSString对iOS和OSX构建的处理方式不同?

(我使用扩展程序解决了这个问题。所有其他共享代码都已成功转换为Swift 3。)

1 个答案:

答案 0 :(得分:2)

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之外,它们具有非常相似的&#34;大小&#34;除前者使用AppKit而后者使用UIKit的方法。