2017-09-04 47 views
-1

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

回答

1

沒有必要將某些東西轉換爲已知(編譯器)所具有的類型。

只是刪除整個條件,並直接使用您的key

1

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

1

由於UserDefault中的鍵應該是String類型的鍵,因此將鍵轉換爲字符串是沒有用的,因此您會收到此警告。

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

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