如何从数组中的对象中删除 "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 属性声明为隐式解包可选作为不编写初始化程序的不在场证明是非常糟糕的做法。

假设记录中的每个属性都有一个值,将属性声明为非可选属性并编写初始化程序。

至少 createdrecordID 应该总是有一个值!

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 })