2016-08-26 3 views
1

구조의 인스턴스를 이렇게 만드는 것이 옳습니까?간단한 Int를 사용하여 구조체의 인스턴스를 만들 수 있습니까?

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

var barometer: Barometer = 80 

아니면 프로토콜을 채택해야합니까?

당신은 IntegerLiteralConvertible 프로토콜을 채택하여 그 일을 할 수
+0

왜 시도하지 않습니까? – molbdnilo

+0

"맞습니까?" –

답변

6

: 이제 Barometer 값이 리터럴 정수에서 인스턴스화 할 수

extension Barometer: IntegerLiteralConvertible { 
    public init(integerLiteral value: Int) { 
     self.init(pressure: value) 
    } 
} 

:

let barometer: Barometer = 80 
print(barometer) // Barometer(pressure: 80) 

그러나이 리터럴에서만 작동 있습니다 임의의 값을 사용하지 않음 정수 값 :

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) 

스위프트 3,IntegerLiteralConvertibleExpressibleByIntegerLiteral으로 바꿉니다.

+0

니스. 그것은 완벽하게 작동합니다. –

+0

> 그러나 리터럴에서만 작동하며 임의의 값으로 작동시키는 방법이 없다는 점에 유의하십시오. swift3 동일한 상황에서? –

+1

@ ShadowOf : 아주 초기 Swift 버전은 임의의 변환 방법을 정의 할 수 있었지만 오래 전에 제거되었습니다. 제가 아는 한, 상황은 스위프트 3에서 변경되지 않았습니다. –