【发布时间】:2021-01-28 15:08:04
【问题描述】:
我正在尝试在我的代码中加入更多结构,所以我正在实现这个UserDefaultsService:
class UserDefaultsService {
let defaults = UserDefaults(suiteName: UserDefaults.Keys.groupKey)
static let shared = UserDefaultsService()
func updateDataSourceArrayWithWishlist(wishlist: Wishlist) {
guard var dataSourceArray = defaults?.getDataSourceArray() else { return }
if let index = dataSourceArray.firstIndex(where: ({$0.id == wishlist.id})) {
dataSourceArray[index] = wishlist
defaults?.setDataSourceArray(data: dataSourceArray)
}
}
func getDataSourceArray() -> [Wishlist]? {
return defaults?.getDataSourceArray()
}
}
但正如您所见,defaults 是可选的。我知道我可以使用guard 安全地打开它,例如每次我使用它时,但有没有更好/更清洁的方法来做到这一点?我的想法是只打开一次,然后我可以在UserDefaultsService 的任何地方使用它。
【问题讨论】:
-
您可以强制解包 (
!),但通常我喜欢使用guard有条件地解包或使用preconditionFailure失败 -
@NewDev 这就是我想要的,但我不能在类变量中使用
guard -
您可以使用计算属性。或者,您可以使用立即执行的闭包,即
let default = { guard let ... }()
标签: ios swift variables unwrap swift-optionals