1
나는 구문을 찾을 수없는,하지만 난 이런 일을하고 싶지 :일반적으로 열거 형을 유추하고 제한 할 수 있습니까?
class MyClass {
let stringValue: String // filled in later
let integerValue: Int // filled in later
init(stringValue: String) {
self.stringValue = stringValue
self.integerValue = stringValue.hashValue
}
init(integerValue: Int) {
self.integerValue = integerValue
self.stringValue = String(integerValue)
}
}
extension MyClass {
// This is invalid syntax, but I think you can understand
// vvvvvvvvv I'm trying to give back an enum whose type is inferred
var enumValue<T: enum>: T? {
get {
// This is also invalid; I want to check the type of the enum's raw value
if T is String {
return T(rawValue: self.stringValue)
} else if T is Int {
return T(rawValue: self.integerValue)
} else {
return nil
}
}
}
}
사용법은 같은 것입니다 :
enum MyEnum: String {
case foo
case bar
}
func baz(_ some: MyClass) {
if let myEnum: MyEnum = some.enumValue {
print(myEnum)
}
}
let some = MyClass(stringValue: "foo")
baz(some) // prints "foo"
것은 스위프트이 가능합니까? 즉, 유형이 enum으로 제한되고 사용법에 따라 유추되는 일반 유형의 필드 또는 함수를 사용하려면 해당 값을 사용하여 enum 값을 인스턴스화 하시겠습니까?
아름다운! 거의 정확하게 내가 찾고 있던 것 : D –