Подтвердить что ты не робот

Swift: как использовать цикл for-in с опцией?

Каков правильный способ использования цикла for-in с дополнительным?

Прямо сейчас я всегда выполняю необязательное связывание перед его циклом. Существуют ли другие идиомы?

let optionalInt:[Int]? = [1, 2, 3]

if let optionalInt = optionalInt {
  for i in optionalInt {
    print(i)
  }
}
4b9b3361

Ответ 1

Если набор операций, применяемых ко всем элементам массива, можно заменить for-loop закрытием forEach{} и использовать необязательную цепочку:

var arr: [Int]? = [1, 2, 3]
arr?.forEach{print($0)}

Ответ 2

Я не думаю, что там правильный путь. Есть много разных способов, это действительно сводится к тому, что вы предпочитаете, Swift полон функций, которые могут сделать вашу программу очень приятной в соответствии с вашим выбором.

Вот несколько способов, о которых я мог подумать:

let optionalInt:[Int]? = [1, 2, 3]

for i in optionalInt! { print(i) }

for i in optionalInt ?? [] { print(i) }

for i in optionalInt as [Int]! {  print(i) }

Ответ 3

Вы можете написать это:

let optionalInt:[Int]? = [1, 2, 3]
for i in optionalInt ?? [Int]() {
    print(i)
}

Но я бы рекомендовал вам не использовать необязательное значение, например, вы можете написать вот так:

var values = [Int]()
// now you may set or may not set 
for i in values {
    print(i)
}

Или, если вы хотите использовать необязательное значение, и эти кодовые вызовы в функции могут использовать guard:

guard let values = optionalInt else { return }
for i in values {
    print(i)
}

Ответ 4

Я опаздываю на два года, но думаю, что это лучший способ.

func maybe<T>(risk: T?, backup: T) -> T {
  return risk.maybe(backup)
}

и

extension Optional {
   func maybe(_ backup: Wrapped) -> Wrapped {
     switch self {
     case let .some(val):
        return val
     case .none:
        return backup
     }
   }
}

и теперь

for i in optionalInt.maybe([]) {
    print(i)
}

Ответ 5

В соответствии с документацией Apple вы можете сделать это:

let arrayOfOptionalInts: [Int?] = [nil, 2, 3, nil, 5]
// Match only non-nil values
for case let number? in arrayOfOptionalInts {
    print("Found a \(number)")
}

Вот ссылка на Дополнительные шаблоны: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Patterns.html#//apple_ref/doc/uid/TP40014097-CH36-ID520