Создайте постоянный кортеж с не необязательными значениями и сравните с другим кортежем, который имеет необязательные значения - PullRequest
0 голосов
/ 13 декабря 2018

В основном я хотел сравнить два кортежа, в которых tuple1 имеет 3 значения, все не являются необязательными, а tuple2 имеет 3 переменные с одинаковым типом данных, но все они являются необязательными.

let tuple1 = (1, true, true) // Static tuple
let tuple2 = (value1?.intValue, value2?.boolValue, value3?.boolValue) //Here value1,2.. are optional `NSNumber` values.

, когдаЯ попытался сравнить их tuple1 == tuple2, я получил ошибку компилятора, как показано ниже

Невозможно выразить преобразование кортежей '(Int, Bool, Bool)' в '(Int ?, Bool ?, Bool?)'

Так что я обошел эту проблему, как показано ниже, чтобы очистить вышеуказанную ошибку.

let expectedResult = (LeadSyncStatus.Synced.rawValue ?? nil, true ?? nil, true ?? nil)

Но на этот раз компилятор поставляется с предупреждением, как показано ниже,

Левая сторона оператора объединения нулей '??'имеет необязательный тип 'Bool', поэтому правая часть никогда не используется

Как сделать исполняемый код без ошибок и предупреждений компилятора?

Ответы [ 3 ]

0 голосов
/ 13 декабря 2018

Я нашел другое решение, и я думаю, что было бы лучше использовать, чем struct: используйте typealias

typealias tuple1 = (Int?, Bool?, Bool?)

let myOptionalTuple: tuple1 = (1, true, true)

print(myOptionalTuple.0) 
0 голосов
/ 13 декабря 2018

Вы можете сделать это следующим образом:

let tuple1 = (1, true, true)
let tuple2: (Int?, Bool?, Bool?) = (1, true, true)

let (a, b, c) = tuple2

if let aValue = a,
    let bValue = b,
    let cValue = c,
    (aValue, bValue, cValue) == tuple1 {
    print("Equal")
}

Или, как предложено vacawama

let tuple1 = (1, true, true)
let tuple2: (Int?, Bool?, Bool?) = (1, true, true)

if case let (a?, b?, c?) = tuple2,
    (a, b, c) == tuple1 {
    print("Equal")
}
0 голосов
/ 13 декабря 2018

Через несколько минут я нашел обходной путь, как показано ниже.

let tuple1 = (1, true, true) as (Int?, Bool?, Bool?)

Теперь ошибка компилятора и предупреждение очищены, и код был выполнен плавно.

Так что я подумал поделиться этим со всеми.

Надеюсь, что это может помочь кому-то еще.

Спасибо!

...