如何从数组中的对象中删除 "Optional()"
How do I remove "Optional()" from object in an array
所以我使用 CloudKit 并将所有数据提取到数组中作为 [StartDay],我的 StartDay class 看起来像这样:
import UIKit
import CloudKit
class StartDay {
var recordID: CKRecord.ID!
var wakeUp: String!
var sleptWell: String!
var dNN: String!
var created: String! {
get {
return created
}
}
}`
我的函数加载得到一个数组列表,其中包含从数据库接收到的信息。在我的数据库中它是这样的:“22.01.09:
func checkIfButtonShouldBeEnabled(startDayList: [StartDay]){
let startDayDates = startDayList.map{[=12=].created}
for i in 0..<startDayDates.count {
print(startDayDates)
}
}`
输出:
可选(“22.01.2019”)
可选(“22.01.2019”)
我想删除 "Optional()",所以它只显示“22.01.2019”,我该怎么做?
更新:获取函数
func loadStartDay() -> [StartDay]{
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "StartDay", predicate: predicate)
let operation = CKQueryOperation(query: query)
var startDays: [StartDay] = []
operation.desiredKeys = ["wakeUp", "wellSlept", "dNN", "recordID", "createdDato"]
operation.recordFetchedBlock = { (record:CKRecord) in
let newStartDay = StartDay()
newStartDay.wakeUp = record.object(forKey: "wakeUP") as? String
newStartDay.sleptWell = record.object(forKey: "sleptWell") as? String
newStartDay.dNN = record.object(forKey: "dNN") as? String
newStartDay.recordID = record.object(forKey: "recordID") as? CKRecord.ID
newStartDay.created = record.object(forKey: "createdDato") as? String
print(newStartDay.created)
startDays.append(newStartDay)
}
您可以使用 print(startDayDates!)
或 print(startDayDates ?? "default value")
。
但我建议使用 startDayList.compactMap()
而不是 startDayList.map()
以确保您的数组不包含 nil 值。
你也可以这样做:
startDayList
.compactMap { [=10=].created }
.forEach { print([=10=]) }
由于您设计了数据库模型您完全知道哪些记录属性始终存在。将 class 属性声明为隐式解包可选作为不编写初始化程序的不在场证明是非常糟糕的做法。
假设记录中的每个属性都有一个值,将属性声明为非可选属性并编写初始化程序。
至少 created
和 recordID
应该总是有一个值!
import UIKit
import CloudKit
class StartDay {
var recordID: CKRecord.ID
var wakeUp: String
var sleptWell: String
var dNN: String
var created: String
init(record : CKRecord) {
// recordID can be retrieved directly
self.recordID = record.recordID
self.wakeUp = record.object(forKey: "wakeUP") as! String
self.sleptWell = record.object(forKey: "sleptWell") as! String
self.dNN = record.object(forKey: "dNN") as! String
self.created = record.object(forKey: "createdDato") as! String
}
}
并使用
创建实例
operation.recordFetchedBlock = { record in
startDays.append(StartDay(record: record))
}
现在 Optional
已经消失了。
print(startDayList.map{ [=12=].created })
所以我使用 CloudKit 并将所有数据提取到数组中作为 [StartDay],我的 StartDay class 看起来像这样:
import UIKit
import CloudKit
class StartDay {
var recordID: CKRecord.ID!
var wakeUp: String!
var sleptWell: String!
var dNN: String!
var created: String! {
get {
return created
}
}
}`
我的函数加载得到一个数组列表,其中包含从数据库接收到的信息。在我的数据库中它是这样的:“22.01.09:
func checkIfButtonShouldBeEnabled(startDayList: [StartDay]){
let startDayDates = startDayList.map{[=12=].created}
for i in 0..<startDayDates.count {
print(startDayDates)
}
}`
输出: 可选(“22.01.2019”) 可选(“22.01.2019”)
我想删除 "Optional()",所以它只显示“22.01.2019”,我该怎么做?
更新:获取函数
func loadStartDay() -> [StartDay]{
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "StartDay", predicate: predicate)
let operation = CKQueryOperation(query: query)
var startDays: [StartDay] = []
operation.desiredKeys = ["wakeUp", "wellSlept", "dNN", "recordID", "createdDato"]
operation.recordFetchedBlock = { (record:CKRecord) in
let newStartDay = StartDay()
newStartDay.wakeUp = record.object(forKey: "wakeUP") as? String
newStartDay.sleptWell = record.object(forKey: "sleptWell") as? String
newStartDay.dNN = record.object(forKey: "dNN") as? String
newStartDay.recordID = record.object(forKey: "recordID") as? CKRecord.ID
newStartDay.created = record.object(forKey: "createdDato") as? String
print(newStartDay.created)
startDays.append(newStartDay)
}
您可以使用 print(startDayDates!)
或 print(startDayDates ?? "default value")
。
但我建议使用 startDayList.compactMap()
而不是 startDayList.map()
以确保您的数组不包含 nil 值。
你也可以这样做:
startDayList
.compactMap { [=10=].created }
.forEach { print([=10=]) }
由于您设计了数据库模型您完全知道哪些记录属性始终存在。将 class 属性声明为隐式解包可选作为不编写初始化程序的不在场证明是非常糟糕的做法。
假设记录中的每个属性都有一个值,将属性声明为非可选属性并编写初始化程序。
至少 created
和 recordID
应该总是有一个值!
import UIKit
import CloudKit
class StartDay {
var recordID: CKRecord.ID
var wakeUp: String
var sleptWell: String
var dNN: String
var created: String
init(record : CKRecord) {
// recordID can be retrieved directly
self.recordID = record.recordID
self.wakeUp = record.object(forKey: "wakeUP") as! String
self.sleptWell = record.object(forKey: "sleptWell") as! String
self.dNN = record.object(forKey: "dNN") as! String
self.created = record.object(forKey: "createdDato") as! String
}
}
并使用
创建实例operation.recordFetchedBlock = { record in
startDays.append(StartDay(record: record))
}
现在 Optional
已经消失了。
print(startDayList.map{ [=12=].created })