考虑以下扩展:
extension Dictionary { func someMethod() { for (key,value) in self { if let valueString = value as? String { println(" \(key) = \(valueString)") } else { println(" \(key) = \(value) cannot be cast to `String`") } } }}
所以考虑以下代码:
let dictionary: [String: AnyObject?] = ["foo": "bar"]dictionary.someMethod()
而且好奇地报道
foo = Optional(bar) cannot be cast to `String`
我可以编写一个非可扩展的方法来处理具有可选值的字典参数,但是不能看到如何作为Dictionary的扩展.
你可以用反思来做到这一点.不需要比你已经有更多的代码:extension Dictionary{ func someMethod() { for (key,value) in self { var valueRef = _reflect(value) while valueRef.disposition == .Optional && valueRef.count > 0 && valueRef[0].0 == "Some" { valueRef = valueRef[0].1 } if let valueString: String = valueRef.value as? String { print(" \(key) = \(valueString)") } else { print(" \(key) = \(value) cannot be cast to `String`") } } }}
let dictionary: [String : AnyObject?] = ["foo" : "bar"]dictionary.someMethod()
返回
foo = bar
let dictionary: [String : AnyObject?] = ["foo" : nil]dictionary.someMethod()
返回
foo = nil cannot be cast to `String`
let dictionary: [String : AnyObject?] = ["foo" : UIVIEwController()]dictionary.someMethod()
返回
foo = Optional(<UIVIEwController: 0x7fee7e819870>) cannot be cast to `String`总结
以上是内存溢出为你收集整理的swift – 如何编写处理可选值的字典扩展名全部内容,希望文章能够帮你解决swift – 如何编写处理可选值的字典扩展名所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)