首页 > 试题广场 >

Swift 1.0 or later 下面是thermome

[问答题]

Swift 1.0 or later

下面是thermometer作为结构体的例子:

1
2
3
4
5
6
public struct Thermometer {
public var temperature: Double
public init(temperature: Double) {
self.temperature = temperature
}
}

创建一个thermometer实例对象,你可以使用下面的代码:

1
var t: Thermometer = Thermometer(temperature:56.8)

但是像下面的代码那样初始化对象是否会更好:

1
var thermometer: Thermometer = 56.8

能这样做吗?如果可以,怎么做?提示:it has to do with convertibles, but not convertibles like Camaros and Mustangs

推荐

Swift 定义了下面的协议,这些协议可以使一种类型通过字面量的方式来初始化并赋值。

1
2
3
4
5
6
7
8
9
NilLiteralConvertible
BooleanLiteralConvertible
IntegerLiteralConvertible
FloatLiteralConvertible
UnicodeScalarLiteralConvertible
ExtendedGraphemeClusterLiteralConvertible
StringLiteralConvertible
ArrayLiteralConvertible
DictionaryLiteralConvertible

采用相应的协议并且提供一个允许字面量初始化的公用方法。在Thermometer类型的例子下,我们需要实现FloatLiteralConvertible协议,代码如下:

1
2
3
4
5
extension Thermometer : FloatLiteralConvertible {
public init(floatLiteral value: FloatLiteralType) {
self.init(temperature: value)
}
}

那么现在,你就可以通过一个简单的float数字创建一Thermometer对象,代码如下:

1
var thermometer: Thermometer = 56.8
发表于 2018-07-12 20:39:57 回复(0)