我正在尝试检查字符串是否为空,如果它不为空,我想显示在textField(outUrl.text)
let storage = UserDefaults.standard
var mainsite = storage.object(forKey:"sitestring") ?? ""
if (mainsite != "") {
outUrl.text = mainsite
}
但我有错误: 错误:!=无法应用于string类型和任何
类型的操作数如何检查字符串是否为空?
答案 0 :(得分:1)
推荐的解决方案是使用适当的API(string(forKey:
),它返回String
而不是Any
和可选的绑定。
好处是你摆脱了任何类型转换和零合并运算符
if let mainsite = UserDefaults.standard.string(forKey:"sitestring"), !mainsite.isEmpty {
outUrl.text = mainsite
}
答案 1 :(得分:0)
Objective-C API -[UserDefaults obejectForKey:]
返回的结果属于id
类型,以便容纳各种类型的对象(NSString
,NSNumber
等等)。当从Swift代码访问时,它变为Any?
(任何类型,可能是nil
)。
如果您知道存储的值确实是一个字符串,则需要在比较前尝试强制转换:!=
类型String
和Any?
之间的值{}不定义默认!这意味着什么?):
var mainsite = storage.object(forKey:"sitestring") as? String ?? ""
这样,你得到一个String
值(如果转换成功)或空字符串(如果失败,因为没有对象的关键" sitestring"或者它不是& #39; t可转换为String
值。
答案 2 :(得分:0)
UserDefaults.standard的结果是Any?类型,因此在将值赋给mainsite变量之前,请将其强制转换为String。这是一个例子,
let storage = UserDefaults.standard
var mainsite = storage.object(forKey:"sitestring") as? String