2016-09-29 43 views
1

我有一個由iOS和OSX共享的類。爲什麼Swift 3對待OS X和iOS版本的NSString不同?

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

...導致以下錯誤或爲iOS打造:

呼叫不正確的參數標籤(有「withAttributes:」升級到斯威夫特3,下面的代碼行後,預計「屬性:')。

修正如下:

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

但隨後OSX構建有錯誤:

呼叫不正確的參數標籤(有 '屬性:' 預期 'withAttributes:')

爲什麼NSString在iOS和OSX版本中的處理方式不同?

(我已經解決這個使用的擴展工作。所有其他的共享代碼已成功轉換爲雨燕3)

回答

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 
      ... 
} 

除了OS X上使用NSSize,並使用CGSize的iOS他們除了前頗爲相似「大小」的方法使用AppKit,而後者使用UIKit