swift3からは、確実にnil/NSNullを検出することができません。このスニペットでは、nil
の代わりに、私はOptional(_SwiftValue)
値を取得していますが、これは検出方法がわかりません。オプション(_SwiftValue)が含まれている場合、nil/NSNull/optionalをチェックする方法
私は運がなくchecking classForCoderを試しました。
は、他の場所で、私はJSONSerialization.data()
に渡す前に私のデータをサニタイズする必要がtalk about id-as-Any causing this kind of problem
func testVotingMachine() {
let vote: String? = nil // Can be a string or nil
//let vote: String? = "president" // Can be a string or nil
var dict = [String: AnyObject?]()
dict["vote"] = vote as AnyObject?
let obj: AnyObject? = dict as AnyObject?
guard let dict2 = obj as? Dictionary<String, AnyObject?> else {
fatalError()
}
let value = dict2["vote"] as AnyObject?
let didVote = notNil(objectOrNil: value)
XCTAssertFalse(didVote) // BOOM! notNil() fails to detect nil
}
func notNil(objectOrNil: AnyObject?) -> Bool {
guard let object: AnyObject = objectOrNil else {
return false
}
if object is NSNull {
return false
}
//if object.classForCoder == NSNull.classForCoder() {
// return false
//}
// TODO: how to check for? Optional(_SwiftValue)
print("class for coder: \(object.classForCoder)")
return true
}
あります。したがって、私は検出する必要がありますOptional(_SwiftValue)
が見えます。 – rmaddy
これはディクショナリに 'Optional(_SwiftValue)'を挿入できる最小のスニペットです。それは醜いです。開発者に公開されていない内部型ですか?それとも迅速な開発者が対処しなければならないものなのでしょうか?オプション(_SwiftValue)を検出する方法 – neoneye