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

后端 未结 1 1022
梦如初夏
梦如初夏 2020-12-04 01:02

Is it right to make a structure\'s instance this way?

public struct Barometer {
   public var pressure: Int
   public init(pressure: Int) {
      self.pressu         


        
相关标签:
1条回答
  • 2020-12-04 01:18

    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.

    0 讨论(0)
提交回复
热议问题