首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift NSUserDefaults setString:forKey:?

Swift NSUserDefaults setString:forKey:?
EN

Stack Overflow用户
提问于 2015-03-18 15:55:49
回答 4查看 25.8K关注 0票数 21

NSUserDefaults有integerForKey:setInteger:forKey:stringForKey:,但没有setString:forKey:

如何将字符串设置为NSUserDefaults?它有setObject:forKey:,但在Swift中,String是一个结构。使用setObject:forKey:存储字符串可以吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-18 16:24:08

在对引用的讨论中可以找到可以使用setObject应用字符串的原因:

因为Swift字符串是桥接到NSString的,所以setObject的用法是有效的。但是,正如提到的其他类型一样,在NSUserDefaults中使用setObject setter是不被接受的;它们有自己的方便设置程序。

尽管如此,几乎所有可以想到的东西都可以使用带有NSUserDefaults参数的setObject进行序列化和放置到NSData中(如SO中其他部分所述)。

票数 14
EN

Stack Overflow用户

发布于 2015-03-18 16:00:02

更新:Xcode 13.2.1·Swift 5.5.2

代码语言:javascript
复制
let string = "Hello World"

UserDefaults.standard.set(string, forKey: "string")

if let loadedString = UserDefaults.standard.string(forKey: "string") {
    print(loadedString) // "Hello World"
}

Swift的好处在于它允许您轻松地扩展语言。您可以创建自己的date(forKey:)扩展UserDefaults来创建实例方法,如下所示:

代码语言:javascript
复制
extension UserDefaults {
    func date(forKey defaultName:String) -> Date? {
        object(forKey: defaultName) as? Date
    }
}
代码语言:javascript
复制
let userName = "Chris Lattner"
let userAddress = "1 Infinite Loop, Cupertino, CA 95014, United States"
let userDOB = DateComponents(calendar: .init(identifier: .gregorian), year: 1978).date!

UserDefaults.standard.set(userName, forKey: "userName")
UserDefaults.standard.set(userAddress, forKey: "userAddress")
UserDefaults.standard.set(userDOB, forKey: "userDOB")

let loadedUserName = UserDefaults.standard.string(forKey: "userName")
let loadedUserAddress = UserDefaults.standard.string(forKey: "userAddress")
let loadedUserDOB = UserDefaults.standard.date(forKey: "userDOB")

print(loadedUserName ?? "nil")    // "Chris Lattner"
print(loadedUserAddress ?? "nil") // "1 Infinite Loop, Cupertino, CA 95014, United States"
print(loadedUserDOB?.description(with: .init(identifier: "en_US")) ?? "nil")  // "Sunday, January 1, 1978 at 12:00:00
票数 22
EN

Stack Overflow用户

发布于 2016-10-16 15:04:03

Swift 3移除.setObject。使用.set代替。例如:

代码语言:javascript
复制
// Create UserDefaults
let defaults = UserDefaults.standard

// Save String value to UserDefaults
// Using defaults.set(value: Any?, forKey: String)
defaults.set("Some string you want to save", forKey: "savedString")

// Get the String from UserDefaults
if let myString = defaults.string(forKey: "savedString") {
    print("defaults savedString: \(myString)")
}
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29126731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档