May I create an instance of a structure using a simple Int?

二次信任 提交于 2019-11-27 07:24:34

问题


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?


回答1:


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.



来源:https://stackoverflow.com/questions/39160889/may-i-create-an-instance-of-a-structure-using-a-simple-int

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!