NSUserDefaults removeObjectForKey vs. setObject:nil

后端 未结 3 940
时光说笑
时光说笑 2021-01-30 19:26

Are the following two lines equivalent?

1. [[NSUserDefaults standardUserDefaults] removeObjectForKey:@\"example key\"]

2. [[NSUserDefa

3条回答
  •  刺人心
    刺人心 (楼主)
    2021-01-30 19:48

    Swift 5.0 + iOS 11 and up

    Both methods remove the value. Tried this in a playground:

    import Foundation
    
    let key = "Test"
    let value = "test"
    let defaults = UserDefaults.standard
    
    func printUD() {
        print("UserDefaults after modification:\n")
        defaults.dictionaryRepresentation().forEach { print("\($0): \($1)\n") }
        print("-------------\n\n")
    }
    
    defaults.set(value, forKey: key); printUD()
    defaults.set(nil, forKey: key); printUD()
    defaults.set(value, forKey: key); printUD()
    defaults.removeObject(forKey: key); printUD()
    

    Prior to iOS 11 this will result in serializing nil into Data and throw an error.

提交回复
热议问题