swift – 如何解开任意类型的可选值?
发布时间:2020-12-14 06:03:35 所属栏目:百科 来源:网络整理
导读:给定一个[Any]的数组,其中包含可选值和非可选值,例如: let int:Int? = 1let str:String? = "foo"let values:[Any] = [int,2,str,"bar"] 我们如何提取在Any类型(如果有)的Optional的值,所以我们可以创建一个通用打印函数,只打印出值。 例如。这个printAr
给定一个[Any]的数组,其中包含可选值和非可选值,例如:
let int:Int? = 1 let str:String? = "foo" let values:[Any] = [int,2,str,"bar"] 我们如何提取在Any类型(如果有)的Optional的值,所以我们可以创建一个通用打印函数,只打印出值。 例如。这个printArray函数遍历并打印每个元素: func printArray(values:[Any]) { for i in 0..<values.count { println("value[(i)] = (values[i])") } } printArray(values) 其中将输出: value[0] = Optional(1) value[1] = 2 value[2] = Optional("foo") value[3] = bar 我们如何更改它,以便它只打印底层值,以便它解包的值,如果它是可选的?例如: value[0] = 1 value[1] = 2 value[2] = foo value[3] = bar 更新进度… 将参数更改为[Any?]时可以工作,例如: let values:[Any?] = [int,"bar"] func printArray(values:[Any?]) { for i in 0..<values.count { println("value[(i)] = (values[i]!)") } } printArray(values) 其中将打印所需的: value[0] = 1 value[1] = 2 value[2] = foo value[3] = bar 但仍然想看看我们如何解开一个Optional从Any,因为这是什么MirrorType.value返回使得很难提取可选值,例如: class Person { var id:Int = 1 var name:String? } var person = Person() person.name = "foo" var mt:MirrorType = reflect(person) for i in 0 ..< mt.count { let (name,pt) = mt[i] println("(name) = (pt.value)") } 打印: id = 1 name = Optional("foo") 当我需要: id = 1 name = foo
对于Xcode 7和Swift 2:
func unwrap(any:Any) -> Any { let mi = Mirror(reflecting: any) if mi.displayStyle != .Optional { return any } if mi.children.count == 0 { return NSNull() } let (_,some) = mi.children.first! return some } let int:Int? = 1 let str:String? = "foo" let null:Any? = nil let values:[Any] = [unwrap(int),unwrap(str),"bar",unwrap(null)] 这将给你[1,2,“foo”,“bar”,{NSObject}] 将NSNull()更改为nil,并将unwrap func的返回值更改为Any?将总是解包任何类型。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |