Swift:'!='不能应用于'String'和'Any'类型的操作数

时间:2017-08-02 03:08:52

标签: swift string nsuserdefaults

我正在尝试检查字符串是否为空,如果它不为空,我想显示在textField(outUrl.text)

 let storage = UserDefaults.standard
 var mainsite = storage.object(forKey:"sitestring")  ?? ""

        if (mainsite != "") {
            outUrl.text = mainsite
        }

但我有错误: 错误:!=无法应用于string类型和任何

类型的操作数

如何检查字符串是否为空?

3 个答案:

答案 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类型,以便容纳各种类型的对象(NSStringNSNumber等等)。当从Swift代码访问时,它变为Any?(任何类型,可能是nil)。

如果您知道存储的值确实是一个字符串,则需要在比较前尝试强制转换:!=类型StringAny?之间的值{}不定义默认!这意味着什么?):

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