2014-06-05 4 views
4

다음과 같이 enum을 만들고 fromRaw() 함수를 사용하려고합니다.enum의 fromRaw() 함수를 사용하는 방법

enum Test : Int { 
    case a = 1 
    case b, c 
    func description() -> String{ 
     switch self { 
     case .a: 
      return "a" 
     default: 
      return String(self.toRaw()) 
     } 
    } 
} 

내가 이와 같이 사용하는 상황에서 작동합니다. bvalue.description()은 결과 "2"를 제공합니다.

if let bvalue = Test.fromRaw(2) { 
    bvalue.description() 
} 

그러나 If 문없이 다음과 같이 사용하려고 할 때. 그것은 나에게 두 번째 라인에 잘못된 알림을했다 "비() '를 사용하여 비 - 함수 유형 문자열의 값을 호출합니다."

let bvalue = Test.fromRaw(2) 
bvalue.description() 

나는 혼란 스러웠다. If 문을 사용하는 경우와 사용하지 않는 경우의 차이점은 무엇입니까? 왜 두 번째 방법은 효과가 없습니까? 이 fromRaw() 함수는 어떤 유형입니까?

+0

가독성을 높이기 위해 코드의 형식을 올바르게 지정할 수 있습니까? –

+0

가능한 복제본 [원래 변수가 nil인지 확인하는 대신 왜 함께 사용하고 함께 사용합니까? (신속)] (http://stackoverflow.com/questions/24049377/why-would-i-use-if-and-let-together-instead-of-just-checking-if-the-original-va) – Chuck

답변

2

.fromRaw() 메서드는 열거 형의 선택적 값을 반환합니다. 따라서 bvalue 대신 Test 유형이 있으며 유형은 Test?입니다. .fromRaw() 호출이 실패하면, 당신은 런타임 오류가 발생합니다 것을

bvalue!.description() 

참고 : 그 값에 액세스하려면 당신은 당신의 예와 같은 if let...로 랩을 해제 또는 ! 운영자로 랩핑 해제를 강제로 중 하나가 필요합니다. 이 그것을보고보십시오 : fromRaw은()가 더 이상 존재하지 않음을

let bvalue = Test.fromRaw(5) // 5 is out of bounds, bvalue == nil 
bvalue!.description()   // runtime error: Can't unwrap Optional.None 
+1

'fromRaw()'는 더 이상 Swift 언어의 일부가 아닙니다. 대신, 이제는 다음과 같이 failable 이니셜 라이저를 사용합니다 :'if let bvalue = Test (rawValue : 2) {...}' –

+0

'fromRaw()'는 가치가 떨어졌습니다. 대답을 업데이트하십시오. – Zorayr

0

두 번째 스 니펫에 bvalue이라는 글자를 쓰는 것은 선택 사항입니다. 즉, 변수 bvalue의 가능한 값은 nil입니다. if 문을 사용하여 "선택 사항을 unwrap하여"nil 또는 원시 값 중 하나에 넣습니다. 자세한 내용은 here을 참조하십시오.

0

fromRaw() 함수는 Testenum을 포함하거나 수 있습니다 귀하의 경우 Test?의 옵션 열거를 반환 nil

, 당신이 함께 일을 정확히 무엇이다, 그 랩을 해제해야한다 그것을 사용하기 전에 if-let 패턴

설명에 직접 액세스하려고하면 컴파일러 오류가 발생합니다.

bvalue!.description과 같이 ! 연산자를 사용하여 선택적 값의 랩핑을 강제로 수행 할 수도 있습니다. 그러나 Optional이 실제 값을 포함하고 있으며 nil이 아니라는 것이 명백한 경우에만 사용해야합니다. 값이 nil 인 상황에서이 값을 사용하면 런타임 오류가 발생합니다.

7

참고. 새로운 용도는 다음과 같습니다.

Test(rawValue: 2)