현재 비어 있지 않은 Swift 사전에 주어진 키가 포함되어 있는지 확인하고 동일한 사전에서 하나의 값을 얻기 위해 다음과 같은 (서투른) 코드 조각을 사용하고 있습니다.
어떻게 Swift에 더 우아하게 넣을 수 있습니까?
// excerpt from method that determines if dict contains key
if let _ = dict[key] {
return true
}
else {
return false
}
// excerpt from method that obtains first value from dict
for (_, value) in dict {
return value
}
답변
당신은 필요하지 않습니다 어떤 이 사전에 이미 무엇 때문에이 작업을 수행하는 특수 코드를. 당신이 가져올 때 dict[key]
당신이 알고 하지 않습니다 다시 얻을 수있는 옵션 때문에, 사전에 키가 포함되어 있는지 여부를 nil
(그리고 값을 포함).
당신이 경우에 따라서, 단지 사전이 키가 포함되어 있는지 여부를 질문에 대답 할 질문 :
let keyExists = dict[key] != nil
값을 원하고 사전에 키가 포함되어 있다는 것을 알고 있다면 다음과 같이 말합니다.
let val = dict[key]!
그러나 일반적으로 발생하는 것처럼 키에 키가 있는지 알지 못하는 경우 키를 가져 와서 사용하고 싶지만 존재하는 경우에만 다음과 같이 사용하십시오 if let
.
if let val = dict[key] {
// now val is not nil and the Optional has been unwrapped, so use it
}
답변
왜 간단히 확인하지 dict.keys.contains(key)
않습니까? dict[key] != nil
값이 nil 인 경우 검사 가 작동하지 않습니다. [String: String?]
예를 들어 사전과 마찬가지로 .
답변
let keyExists = dict[key] != nil
사전에 키가 있지만 값이 nil 인 경우 허용되는 답변 이 작동하지 않습니다.
사전에 키가 전혀 포함되어 있지 않은지 확인하려면 이것을 사용하십시오 (Swift 4에서 테스트).
if dict.keys.contains(key) {
// contains key
} else {
// does not contain key
}
답변
@matt에서 필요한 것을 얻었지만 키 값을 빠르게 얻을 수있는 방법을 원하거나 해당 키가 없으면 첫 번째 값을 얻는 경우 :
extension Dictionary {
func keyedOrFirstValue(key: Key) -> Value? {
// if key not found, replace the nil with
// the first element of the values collection
return self[key] ?? first(self.values)
// note, this is still an optional (because the
// dictionary could be empty)
}
}
let d = ["one":"red", "two":"blue"]
d.keyedOrFirstValue("one") // {Some "red"}
d.keyedOrFirstValue("two") // {Some "blue"}
d.keyedOrFirstValue("three") // {Some "red”}
실제로 첫 번째 값으로 얻을 수있는 것을 보장하지는 않으며이 경우에는 빨간색으로 반환됩니다.
답변
if dictionayTemp["quantity"] != nil
{
//write your code
}
답변
선택적 NSAttributedString을 저장하는 캐시 구현에 대한 내 솔루션 :
public static var attributedMessageTextCache = [String: NSAttributedString?]()
if attributedMessageTextCache.index(forKey: "key") != nil
{
if let attributedMessageText = TextChatCache.attributedMessageTextCache["key"]
{
return attributedMessageText
}
return nil
}
TextChatCache.attributedMessageTextCache["key"] = .some(.none)
return nil
답변
Swift 3에서 나를 위해 작동하는 것은 다음과 같습니다.
let _ = (dict[key].map { $0 as? String } ?? "")