【问题标题】:Why does Swift 3 treat NSString differently for OSX vs iOS build?为什么 Swift 3 对 OSX 和 iOS 构建的 NSString 有不同的处理方式?
【发布时间】:2017-02-07 09:00:44
【问题描述】:

我有一个由 iOS 和 OSX 共享的课程。升级到 Swift 3 后,以下代码行:

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

...导致 iOS 构建出现以下错误:

调用中的参数标签不正确(有 'withAttributes:',预期为 'attributes:')。

固定如下:

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

但随后 OSX 构建出现错误:

调用中的参数标签不正确(有 'attributes:',预期 'withAttributes:')

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

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

【问题讨论】:

    标签: ios macos nsstring swift3


    【解决方案1】:

    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 之外,它们具有非常相似的“大小”方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 2016-02-15
      • 2017-07-22
      • 2016-03-27
      • 1970-01-01
      相关资源
      最近更新 更多