.....<= 예상되는 유형을 신속하게 요청하는 피연산자?
for zeroItems in snapshot.value as! NSDictionary where zeroItems.value["Value"] as! Int <= 0
가 나는 Expected type
오류를 받고 있어요. 설명하고 수정 방법을 알려주십시오.
.....<= 예상되는 유형을 신속하게 요청하는 피연산자?
for zeroItems in snapshot.value as! NSDictionary where zeroItems.value["Value"] as! Int <= 0
가 나는 Expected type
오류를 받고 있어요. 설명하고 수정 방법을 알려주십시오.
많은 as!
캐스트를 한 줄에 사용해야하는 경우 거의 확실하게 Any
을 과도하게 사용했습니다. 이 형식에 대한 사용자 지정 구조체를 만들고 데이터를이 형식으로 변환합니다. NSDictionary
을 지나가고 as!
을 사용하면 시스템과 싸우고있는 것입니다.
즉,이 작업을 수행하려면 더 많은 괄호가 필요할 것입니다. 다음과 같이하십시오 :
for zeroItems in (snapshot.value as! NSDictionary) where (zeroItems.value["Value"] as! Int) <= 0
하지만 이것은 가능한 한 신속하게 피해야합니다.
Swift에서 Foundation 데이터 유형이 그렇게 널리 퍼지는 이유는 무엇입니까?! 그것은 너무 많은 불필요한 복잡성을 추가하지만 사람들은 여전히 그것을 계속합니다. 나는 그것을 얻지 않는다! – Alexander
filter
을 적용하여 논리가 0보다 작은 요소 만 포함하도록 단순화하는 것이 좋습니다. IBM Swift Sandbox에서 작업 예제를 만들었습니다.
import Foundation
// Construct the data structure with demo data
struct Snapshot {
let value: NSDictionary
}
let dict: NSDictionary = [ "a" : -1, "b" : 0, "c" : 1]
let snapshot = Snapshot(value: dict)
//Apply a filter
let zeroItems = snapshot.value.filter{Int($0.1 as! NSNumber) <= 0}
//View the result
print(zeroItems)
당신은 너무 zeroItems
이 키와 값의 튜플, 사전 등 snapshot.value
해석. 사전의 배열을 이해하고 "값"키로 필터를 필터링하겠습니까? 어디에 문제가보고에 도움이 될 몇 가지 괄호를 추가, 모든
// dictionary with Value key, and Int value
let dict: [String: Any] = ["Value":-1]
// array of dictionaries
let value: [[String: Any]] = [dict, <**add here as many as you want**>]
// get only array of integeres
let onlyIntegers = value.flatMap { $0["Value"] as? Int }.filter {$0 <= 0 }
print(onlyIntegers)
// get array of dictionaries which passes <=0 check
let onlyLessOrEqualTo0 = value.filter { dict in
if let value = dict["Value"] as? Int {
return value <= 0
}
return false
}
print(onlyLessOrEqualTo0)
첫째 : 그럼 당신이 코드를 다음 사용할 수 있습니다 경우
지금
for zeroItems in myDict as! NSDictionary where (zeroItems.value["Value"] as! Int) <= 0
, 우리는 '유형'가져 임의의 '아래 첨자 멤버가 없습니다.' 그래서 문제가 당신이 유형은 내가의 사전 코드에서 판단, 생각 zeroItems
의 값의 어떤 스위프트 말하지 않은 것입니다 :
이 나를 위해 컴파일 :
for zeroItems in myDict as! Dictionary<String, Dictionary<String, Int>> where zeroItems.value["Value"]! <= 0
그러나, 이것은 예쁘지 않습니다. 다른 대답으로 제안 된대로 아마도 filter
을 사용하여 더 읽기 쉬운 코드를 얻을 수 있습니다.
왜 Swift에서 NSDictionary를 사용하고 있습니까?! – Alexander
@AlexanderMomchliov 데이터가 Firebase에서 나왔기 때문에 NSDictionary를 사용하고있었습니다. –
괜찮습니다. 네이티브 스위프트 사전에 캐스트하면 즉시 네이티브 스위프트 유형의 모든 이점을 얻을 수 있습니다. – Alexander