신속

2016-06-20 4 views
0

내가 가드를 사용하여 좋아하고 나는뿐만 아니라 유형 체킹을위한 where을 사용하려는 상황에 걸쳐 온 :신속

guard let status = dictionary.objectForKey("status") as! String! where status is String else { ...} 

엑스 코드는 항상 진실 것을 제대로 뿌려줍니다.

내 목표는 가드 뒤에 한 줄에 언 래핑 된 문자열을 갖는 것입니다.

어떻게하면됩니까?

+0

이 표시됩니다. – Wain

+0

죄송합니다. 이미 String임을 알고 있기 때문에 캐스트하려고합니다. –

+2

@lukas_o 아래의 "Shadow Of"가 올바른 답변입니다. – Fogmeister

답변

5

아마도 이걸 원하니? 당신이 사용하는 경우

guard let status = dictionary["status"] as? String else { 
    // status does not exist or is not a String 
} 

// status is a non-optional String 
+0

위대한, 감사합니다! 당신이 먼저 왔으니 수표를 줄거야. –

2

as! String! 당신은 당신이 당신의 사전 내부의 객체가 String해야을 알고 그 스위프트을 말한다. 런타임에 객체가 String이 아닌 경우 Swift가 캐스트 예외를 발생하도록합니다. 따라서 수표의 where 부분이 실패하지 않는 이유는 statusString이거나 where 절 앞에 예외가 발생하는 것입니다.

대신 as! 대신 as? 연산자를 사용하면 선택적인 캐스트를 수행 할 수 있습니다. guard let과 결합하면이 방법을 통해 문자열을 확인하려는 경우

guard let status = dictionary.objectForKey("status") as? String else { ... } 
... // If you reached this point, status is of type String, not String?