Swift 4中空值问题无法解决?如何同时检测字符串空值与空内容
合并处理空字符串与NSNull的简洁方案
嘿,我完全懂你现在的痛点——分开写两套逻辑处理空字符串和NSNull不仅麻烦,还容易因为漏判导致崩溃(比如你第一段代码里的as! String,如果遇到NSNull直接就炸了)。其实我们可以把这两种情况(甚至包括字典里没有对应key的情况)合并成一个安全且简洁的判断逻辑,一次性搞定!
最直接的合并判断写法
先看最基础的实现,直接在代码里完成判断:
// 从字典中取出原始值 let rawLine2Value = permanentCAddVarDictionary?["line2"] // 处理所有异常情况:NSNull、空字符串、无对应key let line2Cvar: String if let validStr = rawLine2Value as? String, !validStr.isEmpty { line2Cvar = validStr } else { // 统一返回占位符,你可以根据需求改成自己想要的内容 line2Cvar = "---" } // 赋值到目标字典 self.permanentCAddDic.setValue(line2Cvar, forKey: "line2Cvar")
更简洁的单行写法
如果追求代码紧凑,也可以用三元表达式简化:
let line2Cvar = (permanentCAddVarDictionary?["line2"] as? String)?.isEmpty == false ? (permanentCAddVarDictionary?["line2"] as! String) : "---" self.permanentCAddDic.setValue(line2Cvar, forKey: "line2Cvar")
注:这里的
as!是安全的,因为前面已经判断了它是有效的非空字符串,不会触发崩溃。
复用性更强的工具函数写法
如果你的项目里有很多类似的字段需要处理,推荐封装成一个工具函数,避免重复代码:
/// 处理字符串的空值/NSNull情况,返回安全的字符串 /// - Parameter value: 原始值(可能是String、NSNull或nil) /// - Parameter placeholder: 异常情况的占位符,默认是"---" func safeString(from value: Any?, placeholder: String = "---") -> String { guard let str = value as? String, !str.isEmpty else { return placeholder } return str } // 使用的时候就超级简单: let line2Cvar = safeString(from: permanentCAddVarDictionary?["line2"]) self.permanentCAddDic.setValue(line2Cvar, forKey: "line2Cvar") // 如果某个字段需要不同的占位符,直接传第二个参数就行: let nameCvar = safeString(from: permanentCAddVarDictionary?["name"], placeholder: "未填写")
这个逻辑的核心是:先尝试把原始值转成可选String,同时判断它不是空字符串——只要不满足这两个条件(不管是NSNull、空字符串还是字典里根本没有这个key),都返回预设的占位符,一次性覆盖了你遇到的所有场景,还避免了强制解包的风险。
内容的提问来源于stack exchange,提问作者vasu k
相关产品推荐
相关产品推荐

