2017-03-14 7 views
0

는 그 시도했지만 값이 전무 경우, 올바르게 행동하지 않는 이벤트 (키는 "CODE_REQUEST1가 존재하지 않습니다).키가 사전에 사전에 존재하지 않는지 테스트하는 방법은 무엇입니까?

form.souhait1_1 = contactDetails["CODE_REQUEST1"] != nil ? String(formatIntToString(contactDetails["CODE_REQUEST1"])) : "" 

enter image description here

+0

'@inline (__ always) func index (forKey key : Dictionary.Key) -> Dictionary .Index?' –

+1

당신의 질문을 이해하는 데 어려움을 겪고 있습니다. 문제가 발생 했습니까? 늘 그렇듯이, [mcve]는 크게 감사 할 것입니다. – Hamish

+0

키가 사전 contactDetails에 있는지 테스트하고 싶습니다. 문제는 이미지에서 볼 수있는 값이 nil이라는 것입니다 (표현식 contactDetails [ "CODE_REQUEST1"] = nil). 그래서 실제로는 아는 것이 아니라 식을 사용할 때 contactDetails [ "CODE_REQUEST1"]! = nil이면 사용할 수 있습니다. , 그것은 첫 번째 인수를 실행하고, 그것은 nil이 아니므로 ... – Claudio

답변

1

당신은 조건부로 (들 가능성이 기존 키) : 사용 Optionalmap(_:) 방법을 사용할 수 있습니다

키가 없으면
form.souhait1_1 = contactDetails["CODE_REQUEST1"] 
    .map { String(formatIntToString($0)) } ?? "N/A" 

contactDetails["CODE_REQUEST1"] 호출이 nil 될 것이며, .map 호출이 경우 nil 병합 연산자 ??은 디폴트 값 (상기 "N/A")을 공급하는데 사용되며, nil를 리턴한다.

+0

사실, LLDB에서 'contactDetails [ "CODE_REQUEST1"]'가'AnyObject? '로 해석한다고해도 OP가 원하는 것일 수 있습니다. 실제 문제는 이중 랩된 선택 사항입니다. – Hamish

+0

고마워, 그게 효과가있어 :) – Claudio

+1

@Hamish 네,이 질문에 상당히 혼란 스럽습니다. (하지만 아아,'Optional'의지도가 유용 할 수있는 질문은 너무 매력적입니다!)하지만 나는 LLDB가 단순히'AnyObject' 값 유형의 dict에 소변을 적는다;) – dfri

0

당신은 swift3

에 대한 ?? 사용할 수 있습니다 당신의 사전에서 주어진 키 값 :
var dic = ["CODE_REQUEST1":"success"] 
var value = dic["CODE_REQUEST1"] ?? "" // value = success 
dic = ["qq":"fail"] 
value = dic["CODE_REQUEST1"] ?? "" // value = "" 
+0

고맙습니다. 그러나 지금은 Swift 2입니다. 다음 달에 마이그레이션해야합니다. – Claudio

+1

'??'연산자는 스위프트 1의 시대부터 주변에 있습니다. – Hamish

+0

:) 나는 몰랐습니다, 미안 해요. – Claudio