ios - 为什么Swift 3对OSX和iOS版本的NSString会有不同的对待?

标签 ios macos nsstring swift3

我有一个由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/

相关文章:

ios - localizedCaseInsensitiveContainsString 在 Swift 中不可用

objective-c - NSString : easy way to remove UTF-8 accents from a string?

objective-c - 有没有办法做一半的换行符?

ios - UIPageViewController 空白页

macos - Mac OS 上 x86_64 架构的 undefined symbol

c++ - 如何让 Qt Creator 添加 CEF 框架到 Mac OS X 上的 DEST_DIR?

linux - 使用 eval 的脚本启动的子进程不会在 ctrl+c 上中断

iPhone App无线分发-如何保护.ipa文件?

ios - 不同形状的图像拼贴

ios - 替换 UIlabel 代替 UIImageView 而不删除 interfacebuilder 中的约束