Почему я не могу развернуть это необязательное значение с помощью Swift? - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь получить значение для первой записи: «2018-05-04 09:00:00 +0000». Когда я печатаю `firstRecord ', я получаю необязательное значение в терминале:

необязательно (2018-05-04 09:00:00 +0000).

Тогда я попытался развернуть это так:

if dailyArray.count == 0 {
    print("no record was found")
}else{
    guard let firstRecord : String = dailyArray[0]["startTime"] as! String else {return}
    let firstRecordArray = firstRecord.components(separatedBy: " ")
    print("data exist \(firstRecordArray[0])")
}

И теперь Xcode выдает мне сообщение об ошибке, в котором говорится, что вы пытаетесь развернуть необязательное значение.

Есть идеи, где я ошибаюсь?

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Вы можете использовать необязательную цепочку и синтаксис if let, чтобы развернуть переменную и сделать код намного более кратким и понятным:

// dailyArray should be declared as or typecast to [[String : String]]

guard !dailyArray.isEmpty else {
    print("no record was found")
    exit(1) // or return if in func
}

if let firstRecord = dailyArray.first?["startTime"]?.components(separatedBy: " ") {
    print("data exists: \(firstRecord.first)")
}
else {
    print("no start time date was found")
}
0 голосов
/ 26 июня 2018

Если вы собираетесь использовать необязательную цепочку, то вы также можете использовать .first (возвращает необязательный, nil в пустом массиве) вместо [0] (возвращает значение, вылетает в пустом массиве):

guard !dailyArray.isEmpty else {
    print("no record was found")
    return
}
guard let firstRecord = dailyArray.first?["startTime"] as? String else {
    return
}
let firstRecordArray = firstRecord.components(separatedBy: " ")
print("data exist \(firstRecordArray[0])")
0 голосов
/ 26 июня 2018

Делай как это

guard !dailyArray.isEmpty, let firstRecord = dailyArray[0]["startTime"] as? String else { return }
let firstRecordArray = firstRecord.components(separatedBy: " ")
print("data exist \(firstRecordArray[0])")

В своем коде вы вводите принудительно, поэтому

["startTime"] as! String 

это означает, что значением является Strictly string, в то время как ? говорит, что это может быть string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...