在以前版本的swift中,您会得到像UIColor.whiteColor()
然而,在Swift 3中,你会得到没有像UIColor.white
如何在不使用初始化程序的情况下编写此相同的函数,如UIColor.custom
?
extension UIColor {
func custom() {
return UIColor(white: 0.5, alpha: 1)
}
}
答案 0 :(得分:5)
您可以使用computed properties:
extension UIColor {
static var custom: UIColor {
return UIColor(white: 0.5, alpha: 1)
}
}
答案 1 :(得分:3)
.whiteColor()
是UIColor
上的static method (type method),而.white
是UIColor
上的静态(computed in my example) property。定义它们的区别如下:
struct Color {
let red: Int
let green: Int
let blue: Int
static func whiteColor() -> Color {
return Color(red: 255, green: 255, blue: 255)
}
static var white: Color {
return Color(red: 255, green: 255, blue: 255)
}
}
答案 2 :(得分:2)
它们是属性,而不是函数。
import UIKit
extension UIColor {
// Read-only computed property allows you to omit the get keyword
static var custom: UIColor { return UIColor(white: 0.5, alpha: 1) }
}
答案 3 :(得分:2)
在Swift 3.0中:
<{1>}中的,UIColor.white
是属性,而不是方法/初始化程序
在早期的swift版本中:
<{1>}中的,white
是UIColor.whiteColor()
。
答案 4 :(得分:0)
使用存储的类属性而不是计算的类属性。
extension UIColor {
static let custom = UIColor(white: 0.5, alpha: 1)
}
-
注意:老答案。以前Objective C不允许类属性,现在它。
像其他人所说,这是一个财产。
如果你只使用Swift(没有Objective C),那么你可以使用常规类属性而不是计算属性。
extension UIColor {
@nonobjc static let custom = UIColor(white: 0.5, alpha: 1)
}
答案 5 :(得分:0)
当编译器可以推断出你需要的值的类型时,比如这里
let a: Foo = ...
您可以使用静态成员(方法,函数,存储属性,计算属性)省略该类型的名称。
所以给出了这种类型
class Foo {
static let a = Foo()
static var b = Foo()
static var c:Foo { return Foo() }
static func d() -> Foo { return Foo() }
}
你可以写
let a: Foo = .a
let b: Foo = .b
let c: Foo = .c
let d: Foo = .d()
将值传递给函数
时,可以使用相同的技术func doNothing(foo: Foo) { }
同样,参数的类型可以由编译器推断,而不是写
doNothing(foo: Foo.a)
你可以简单地写
doNothing(foo: .a)