Swift 3 - 如何编写没有像新UIColors这样的初始化程序的函数?

时间:2016-09-23 10:43:02

标签: swift function swift3

在以前版本的swift中,您会得到像UIColor.whiteColor()

这样的颜色

然而,在Swift 3中,你会得到没有像UIColor.white

这样的初始值的白色

如何在不使用初始化程序的情况下编写此相同的函数,如UIColor.custom

extension UIColor {
    func custom() {
        return UIColor(white: 0.5, alpha: 1)
    }
}

6 个答案:

答案 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),而.whiteUIColor上的静态(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>}中的

whiteUIColor.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)