Is it right to make a structure's instance this way?
public struct Barometer {
public var pressure: Int
public init(pressure: Int) {
self.pressure = pressure
}
}
var barometer: Barometer = 80
Or I need to adopt a protocol?
Is it right to make a structure's instance this way?
public struct Barometer {
public var pressure: Int
public init(pressure: Int) {
self.pressure = pressure
}
}
var barometer: Barometer = 80
Or I need to adopt a protocol?
You can make that work by adopting the IntegerLiteralConvertible
protocol:
extension Barometer: IntegerLiteralConvertible {
public init(integerLiteral value: Int) {
self.init(pressure: value)
}
}
Now a Barometer
value can be instantiated from a literal integer:
let barometer: Barometer = 80
print(barometer) // Barometer(pressure: 80)
But note that this works only with literals, not with arbitrary integer values:
let p = 80
let barometer: Barometer = p
// error: cannot convert value of type 'Int' to specified type 'Barometer'
// You have to use:
let barometer = Barometer(pressure: p)
For Swift 3, replace IntegerLiteralConvertible
by
ExpressibleByIntegerLiteral
.