(lldb) po dic▿ 3 elements ▿ 0 : 2 elements - .0 : "total" - .1 : 0.00 ▿ 1 : 2 elements - .0 : "year" - .1 : 2016 ▿ 2 : 2 elements - .0 : "month" - .1 : 12(lldb) po dic["year"]▿ Optional<Any>(lldb) po dic["year"]!2016
是否有一个函数来获取String形式Any?
该函数的用法如下:
let total = UtilSwift.getStrFromAny(dic["total"] as Any )
在objective-c中,我写了一个方法:
+ (Nsstring*)getStringWithoutNull:(ID)value{ Nsstring *strValue = @""; if(value != nil){ strValue = [Nsstring stringWithFormat:@"%@",value]; } if([strValue isEqualToString:@"null"]) { return @""; } if ([strValue isEqual:[NSNull null]]) { return @""; } return strValue;}
在swift中可以写一个这样的方法来获取String形式的Any吗?
Any可能是Int,String,“”,Double或其他类型.
编辑 – 1
在游乐场试过. :
import UIKitlet dict:[String:Any] = ["aa": 123,"year":1994,"month":"12"]let string = String(describing:dict["year"]) ?? "" // Try to turn result into a String,oprint(string) // If I print(string!),and there will report error.
警告:
编辑2
我知道编辑-2可能会绘制百合,但如果使用下面的函数,当我将一个Opitional值传递给func时,返回String也将是Opitinal,如何避免?
以下是我在Playground中的测试,dic [“b”]为Any将参数转换为Opitional:
let dic:[String:Any] = [ // ["b": 12,"A": "A"] "A":"A","b":12]func stringFromAny(_ value:Any?) -> String { if let nonNil = value,!(nonNil is NSNull) { return String(describing: nonNil) // "Optional(12)" } return ""}let str = stringFromAny(dic["b"] as Any) // "Optional(12)"解决方法 试试这个:
func stringFromAny(_ value:Any?) -> String { if let nonNil = value,!(nonNil is NSNull) { return String(describing: nonNil) } return ""}
更新:
如果调用代码用Any调用上面的函数?显式转换为Any的参数(Swift 3编译器允许的奇怪场景),然后它会将参数的最终类型视为非可选的可选项,即Any表示的Any值是Any?.或者,换句话说,该值将被视为可选< Any> .some(值:Any?).
在这种情况下,if to letwrap“some”case返回一个可选值作为函数实现中的结果.这意味着最终的字符串描述将包含“可选”标识.
由于Swift 3编译器很乐意在Any和Any之间进行转换,因此存在各种奇怪之处?并将Any类型的值视为Any类型的值?反之亦然,检测Any是否确实包含“Any”实际上非常复杂.或不,并相应地解开.
下面提供了该功能的一个版本以及一些必要的附加扩展.这个版本将以递归方式展平包含任意数量的嵌套Any的Any值?在insIDe里面检索最里面的非可选值.
虽然这是你似乎正在寻找的东西,但我认为解决程序员不应该做的事情是很麻烦的,即误传一个已知的Any? value是Any,因为编译器有一个奇怪的例外,即使它实际上不是真的.
这是代码的“开发人员证明”版本:
protocol OptionalType { var unsafelyUnwrapped: Any { get } var unsafelyFlattened: Any { get }}extension Optional: OptionalType { var unsafelyUnwrapped: Any { return self.unsafelyUnwrapped } var unsafelyFlattened: Any { return (self.unsafelyUnwrapped as? OptionalType)?.unsafelyFlattened ?? self.unsafelyUnwrapped }}func stringFromAny(_ value:Any?) -> String { switch value { case .some(let wrapped): if let notNil = wrapped as? OptionalType,!(notNil.unsafelyFlattened is NSNull) { return String(describing: notNil.unsafelyFlattened) } else if !(wrapped is OptionalType) { return String(describing: wrapped) } return "" case .none : return "" }}总结
以上是内存溢出为你收集整理的ios – 如何在swift3中从Any获取String全部内容,希望文章能够帮你解决ios – 如何在swift3中从Any获取String所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)