为什么NSImage.Name存在?

Boh*_*ych 4 macos cocoa swift

我不明白为什么创建UIImage我只是传递String构造函数但是为了创建NSImage我必须传递NSImage.Name构造函数.这个解决方案背后有什么想法?

码:

iOS版

let image = UIImage(named: "name")
Run Code Online (Sandbox Code Playgroud)

苹果系统

let image = NSImage(named: NSImage.Name("name"))
Run Code Online (Sandbox Code Playgroud)

谢谢.

Ale*_*ica 6

期望您有一个集中的位置,您可以NSImage.Name使用定义所有图像名称的静态常量进行扩展.然后,所有代码都引用这些单个成员,而不是重复魔术字符串.

extension NSImage.Name {
    static let square = NSImage.Name("square")
    static let triangle = NSImage.Name("triangle")
    static let circle = NSImage.Name("circle")
}

//...

let image = NSImage(named: .square)
Run Code Online (Sandbox Code Playgroud)

  • @BohdanSavych 你得问苹果 (2认同)

ric*_*ter 6

苹果并不总是坚持这样的决定。在 Swift 4.2 (Xcode 10) 中,NSImage.Name现在只是String\xe2\x80\x94 的类型别名,它不再是一个特殊的结构。这样,与参数类型相比,您仍然可以获得一些好处String,并且不必将每个调用站点包装在初始值设定项中。

\n\n

类型上剩余的轻量级差异是从 API 设计者到开发人员的通信,即使它\xe2\x80\x99s 不是由编译器强制执行的。它告诉您在类型系统允许的范围之外,什么样的值对于实际使用有意义。它\xe2\x80\x99 就像类型参数TimeInterval允许any 的方式一样Double,但是当您看到TimeInterval那里时,您会得到提示,例如,传递屏幕的纵横比将\xe2\x80\x99 不会比巧合更有意义。

\n