从字符串到字符串条件铸总是成功的SWIFT 3

问题描述:

enter image description here从字符串到字符串条件铸总是成功的SWIFT 3

func resetUserDefaults() { 
    let userDefaults = UserDefaults.standard 
    let dict = userDefaults.dictionaryRepresentation() 

    for (key,_) in dict { 
     if let key = key as? String { 
      userDefaults.removeObject(forKey: key) 
     } else { 
      #if DEBUG 
       NSLog("\(key)") 
      #endif 
     } 
    } 
} 

我得到这个警告。任何人都可以建议我如何避免这种变异

+0

只需删除?来自该行的字符串。 –

+1

字典键是非可选的,'UserDefaults'中的所有键必须是定义的字符串,它们不能是'nil'。删除整个if let表达式。 – vadian

+1

@vadian这不是关键是可选的,它是'key'已知是一个'String'。 – rmaddy

没有必要将某些东西转换为已知(编译器)所具有的类型。

只是删除整个条件,并直接使用您的key

UserDefaults中的所有密钥必须是String类型。所以key被宣布为String。所以试图将它投射到String是毫无意义的。因此警告。

所有你需要的是:

func resetUserDefaults() { 
    let userDefaults = UserDefaults.standard 
    let dict = userDefaults.dictionaryRepresentation() 

    for (key,_) in dict { 
     userDefaults.removeObject(forKey: key) 
    } 
} 
+2

好吧,哪个孩子没有理由拒绝所有答案?长大。 – rmaddy

+0

是的,这是为我感谢.... – MIOSY

+0

@MIOSY我只是注意到,你还没有接受任何问题的答案。对于你的每个问题,看看答案。如果您认为其中一个答案能够最好地解答您的问题,请点击该答案旁边的复选标记。这让人们知道你的问题已经解决了。 – rmaddy

它会始终显示华林因为dictionaryRepresentation()的返回[字符串:任何]。

所以,当你从字符串转换为字符串时,它肯定会显示警告。 欲了解更多信息 - >https://developer.apple.com/documentation/foundation/userdefaults/1415919-dictionaryrepresentation

由于UserDefault中的键应该是String类型的键,因此将键转换为字符串是没有用的,因此您会收到此警告。

func resetUserDefaults() { 
    let userDefaults = UserDefaults.standard 
    let dict = userDefaults.dictionaryRepresentation() 

    for (key, _) in dict { 
     userDefaults.removeObject(forKey: key) 
    } 
}