gpt4 book ai didi

swift - 如何检查字典值是否恰好是 Bool?

转载 作者:搜寻专家 更新时间:2023-11-01 06:40:23 26 4
gpt4 key购买 nike

假设我们有这样的事情:

  static func convertBoolToString(source: [String: AnyObject]) -> [String:AnyObject]? {
var destination = [String:AnyObject]()
for (key, value) in source {
switch value {
case is Bool:
destination[key] = "\(value as! Bool)"
default:
destination[key] = value
}
}

if destination.isEmpty {
return nil
}
return destination
}

问题是,如果值是 DoubleInt 或任何可转换为 Bool 的值,它将通过第一个 case.
请查看文档:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html

如何检查值是否准确且只是一个Bool

最佳答案

这是一个棘手的问题。请注意,BoolDoubleInt 都不是 AnyObject,它们都是值类型。这意味着它们在字典中表示为 NSNumber。但是,NSNumber 可以将它持有的任何值转换为 Bool

检查 NSNumber 中的类型并不容易。一种检查方法是将引用与 NSNumber(bool:) 构造函数的结果进行比较,因为 NSNumber 始终返回相同的实例:

func convertBoolToString(source: [String: AnyObject]) -> [String:AnyObject]? {
var destination = [String:AnyObject]()

let theTrue = NSNumber(bool: true)
let theFalse = NSNumber(bool: false)

for (key, value) in source {
switch value {
case let x where x === theTrue || x === theFalse:
destination[key] = "\(value as! Bool)"
default:
destination[key] = "not a bool"
}
}

if destination.isEmpty {
return nil
}
return destination
}

let dictionary: [String: AnyObject] = ["testA": true, "testB": 0, "testC": NSNumber(bool: true)]
print("Converted: \(convertBoolToString(dictionary))")

有关其他选项,请参阅 get type of NSNumber

关于swift - 如何检查字典值是否恰好是 Bool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com