Swift 删除可选项和不必要的字符 iOS
Swift remove optionals and unnecessary characters iOS
我正在尝试将结构值存储到数组中,我想将它存储到用户默认值中并检索以显示表视图。
struct item:Codable {
var title : String!
var size : String!
init(title: String, size: String) {
self.title = title
self.size = size
}
}
我正在使用以下方法存储
UserDefaults.standard.set(try? PropertyListEncoder().encode(items), forKey:"items")
然后取回
if let data = UserDefaults.standard.value(forKey:"items") as? Data {
let items_user = try? PropertyListDecoder().decode(Array<item>.self, from: data)
print("*************\(String(describing: items_user))")
}
但输出得到
Optional([ZLib.item(title: Swift.ImplicitlyUnwrappedOptional<Swift.String>.some("con-smash.gsheet"), size: Swift.ImplicitlyUnwrappedOptional<Swift.String>.some("120 KB"))])
如何删除上面optional
和ZLib.item(
、Swift.ImplicitlyUnwrappedOptional<Swift.String>.some(
不必要的信息。
首先结构名称应该以大写字母开头
只需删除结构中的感叹号即可。
如果存在具有非可选值的初始化程序,则永远不要将成员/属性声明为 IUO。
struct Item : Codable {
var title : String
var size : String
init(title: String, size: String) {
self.title = title
self.size = size
}
}
第二
切勿将 value(forKey
与 UserDefaults
一起使用。
在这种情况下,有一个专用方法 data(forKey
,否则使用 object(forKey
或其他标量专用方法(integer(forKey
、bool(forKey
等)。不过这与问题无关。
if let data = UserDefaults.standard.data(forKey:"items") {
最后 catch
在使用 Codable
时总是出错并且不要滥用 String(describing
初始值设定项
do {
let itemsUser = try PropertyListDecoder().decode(Array<Item>.self, from: data)
print("*************", itemsUser)
} catch { print(error) }
}
要删除 print
语句中的应用程序名称,请采用 CustomStringConvertible
并添加您自己的 description
struct Item : Codable, CustomStringConvertible {
var title : String
var size : String
init(title: String, size: String) {
self.title = title
self.size = size
}
var description : String {
return "title : \(title), size : \(size)"
}
}
您可以使用“String
”代替“String!
”以避免打印 "Swift.ImplicitlyUnwrappedOptional.some("。
try?
意味着您将获得一个可选对象,因此您将获得 "Optional([ZLib.item(......"
你可以试试这个:
do {
let items_user = try PropertyListDecoder().decode(Array<item>.self, from: data)
} catch {
//error
}
或:
let items_user = try! PropertyListDecoder().decode(Array<item>.self, from: data)
我正在尝试将结构值存储到数组中,我想将它存储到用户默认值中并检索以显示表视图。
struct item:Codable {
var title : String!
var size : String!
init(title: String, size: String) {
self.title = title
self.size = size
}
}
我正在使用以下方法存储
UserDefaults.standard.set(try? PropertyListEncoder().encode(items), forKey:"items")
然后取回
if let data = UserDefaults.standard.value(forKey:"items") as? Data {
let items_user = try? PropertyListDecoder().decode(Array<item>.self, from: data)
print("*************\(String(describing: items_user))")
}
但输出得到
Optional([ZLib.item(title: Swift.ImplicitlyUnwrappedOptional<Swift.String>.some("con-smash.gsheet"), size: Swift.ImplicitlyUnwrappedOptional<Swift.String>.some("120 KB"))])
如何删除上面optional
和ZLib.item(
、Swift.ImplicitlyUnwrappedOptional<Swift.String>.some(
不必要的信息。
首先结构名称应该以大写字母开头
只需删除结构中的感叹号即可。
如果存在具有非可选值的初始化程序,则永远不要将成员/属性声明为 IUO。
struct Item : Codable {
var title : String
var size : String
init(title: String, size: String) {
self.title = title
self.size = size
}
}
第二
切勿将 value(forKey
与 UserDefaults
一起使用。
在这种情况下,有一个专用方法 data(forKey
,否则使用 object(forKey
或其他标量专用方法(integer(forKey
、bool(forKey
等)。不过这与问题无关。
if let data = UserDefaults.standard.data(forKey:"items") {
最后 catch
在使用 Codable
时总是出错并且不要滥用 String(describing
初始值设定项
do {
let itemsUser = try PropertyListDecoder().decode(Array<Item>.self, from: data)
print("*************", itemsUser)
} catch { print(error) }
}
要删除 print
语句中的应用程序名称,请采用 CustomStringConvertible
并添加您自己的 description
struct Item : Codable, CustomStringConvertible {
var title : String
var size : String
init(title: String, size: String) {
self.title = title
self.size = size
}
var description : String {
return "title : \(title), size : \(size)"
}
}
您可以使用“String
”代替“String!
”以避免打印 "Swift.ImplicitlyUnwrappedOptional.some("。
try?
意味着您将获得一个可选对象,因此您将获得 "Optional([ZLib.item(......"
你可以试试这个:
do {
let items_user = try PropertyListDecoder().decode(Array<item>.self, from: data)
} catch {
//error
}
或:
let items_user = try! PropertyListDecoder().decode(Array<item>.self, from: data)