如何从数组中的对象中删除“ Optional()”

时间:2019-01-23 15:18:04

标签: swift cloudkit

因此,我使用CloudKit并将所有数据作为[StartDay]提取到数组中,我的StartDay类如下所示:

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

我的函数加载得到一个arraylist,其中包含从数据库接收的信息。在我的数据库中,它是这样的:“ 22.01.09:

    func checkIfButtonShouldBeEnabled(startDayList: [StartDay]){

    let startDayDates = startDayList.map{$0.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)

    }

2 个答案:

答案 0 :(得分:2)

您可以使用print(startDayDates!)print(startDayDates ?? "default value")

但是我建议使用startDayList.compactMap()而不是startDayList.map(),以确保您的数组不包含nil值。

您也可以这样:

startDayList
    .compactMap { $0.created }
    .forEach { print($0) }

答案 1 :(得分:1)

设计了您完全了解的数据库模型,其中记录属性始终存在。将类属性声明为隐式,未包装的可选属性(例如,不在写初始化程序的不在场证明)是非常糟糕的做法。

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

至少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{ $0.created })