Swift 3中比较Any?与String触发==运算符错误的正确写法
Swift 3中NSDictionary值与String比较的正确方式
这个问题我之前也碰到过,本质是Swift的强类型特性导致的——NSDictionary的下标返回值是Any?类型,Swift不允许直接把Any?和String用==运算符比较,必须先把值转换成String类型才行。给你几种靠谱的解决方式:
推荐:可选绑定+安全类型转换
这种方式既安全又优雅,还能避免类型不匹配导致的崩溃:var userData = NSDictionary() if !userData.isEmpty, let userStatus = userData["user_status"] as? String, userStatus == "1" { // 在这里执行你的业务逻辑 }顺便提一句,用
isEmpty替代count == 0是更符合Swift风格的写法哦。谨慎使用:强制类型转换
如果你百分百确定user_status对应的值一定是String类型,可以用强制转换,但一旦类型不匹配就会崩溃,所以要慎用:var userData = NSDictionary() if !userData.isEmpty, (userData["user_status"] as! String) == "1" { // 执行逻辑代码 }更Swift化的方案:使用原生字典类型
其实在Swift里,更推荐用原生的[String: Any]替代NSDictionary,它更贴合Swift的类型系统,使用起来更顺手:var userData: [String: Any] = [:] if !userData.isEmpty, let userStatus = userData["user_status"] as? String, userStatus == "1" { // 执行你的逻辑 }
内容的提问来源于stack exchange,提问作者chandra1234
相关产品推荐
相关产品推荐

