我不明白为什么创建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)
谢谢.
期望您有一个集中的位置,您可以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)
苹果并不总是坚持这样的决定。在 Swift 4.2 (Xcode 10) 中,NSImage.Name现在只是String\xe2\x80\x94 的类型别名,它不再是一个特殊的结构。这样,与参数类型相比,您仍然可以获得一些好处String,并且不必将每个调用站点包装在初始值设定项中。
类型上剩余的轻量级差异是从 API 设计者到开发人员的通信,即使它\xe2\x80\x99s 不是由编译器强制执行的。它告诉您在类型系统允许的范围之外,什么样的值对于实际使用有意义。它\xe2\x80\x99 就像类型参数TimeInterval允许any 的方式一样Double,但是当您看到TimeInterval那里时,您会得到提示,例如,传递屏幕的纵横比将\xe2\x80\x99 不会比巧合更有意义。
| 归档时间: |
|
| 查看次数: |
1244 次 |
| 最近记录: |