Как удалить «Optional ()» из объекта в массиве - PullRequest
0 голосов
/ 23 января 2019

Так что, используя 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
    }
}
}`

Моя функция загружает получить массив данных, который содержит информацию, полученную из базы данных.,В моей базе данных это выглядит так: "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 ")

Я хочу удалить«Необязательно ()», поэтому он говорит только «22.01.2019», как я могу это сделать?

ОБНОВЛЕНИЕ: FETCH FUNC

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 голосов
/ 23 января 2019

Как вы разработали модель базы данных вы точно знаете , какие атрибуты записи всегда существуют. Объявление свойств класса как неявного необязательного, необязательного, как алиби, чтобы не писать инициализатор - очень плохая практика.

Предполагая, что каждый атрибут в записи имеет значение, объявляйте свойства как необязательные и пишите инициализатор.

Как минимум 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{ $0.created })
0 голосов
/ 23 января 2019

Вы можете использовать print(startDayDates!) или print(startDayDates ?? "default value").

Но я рекомендую использовать startDayList.compactMap() вместо startDayList.map(), чтобы ваш массив не содержал нулевых значений.

Вы также можете сделать так:

startDayList
    .compactMap { $0.created }
    .forEach { print($0) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...