swift2 - style - uiswitch swift
Swift: ¿Cómo usar for-in loop con un opcional? (5)
No creo que haya una manera adecuada. Hay muchas maneras diferentes, realmente se reduce a lo que prefiera, Swift está lleno de características que pueden hacer que su programa se vea realmente bien de acuerdo con su elección.
Aquí hay algunas maneras en que podría pensar:
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) }
¿Cuál es la forma correcta de usar for-in loop con un opcional?
Ahora mismo realizo siempre un enlace opcional antes de ponerlo en bucle. ¿Hay otros modismos?
let optionalInt:[Int]? = [1, 2, 3]
if let optionalInt = optionalInt {
for i in optionalInt {
print(i)
}
}
Puedes escribir este:
let optionalInt:[Int]? = [1, 2, 3]
for i in optionalInt ?? [Int]() {
print(i)
}
Pero le recomendaría que evite usar valores opcionales, por ejemplo, puede escribir así:
var values = [Int]()
// now you may set or may not set
for i in values {
print(i)
}
O si desea utilizar un valor opcional y este código llama a una función puede usar guard
:
guard let values = optionalInt else { return }
for i in values {
print(i)
}
Según la documentación de Apple, puede hacer esto:
let arrayOfOptionalInts: [Int?] = [nil, 2, 3, nil, 5]
// Match only non-nil values
for case let number? in arrayOfOptionalInts {
print("Found a /(number)")
}
Aquí está el enlace a patrones opcionales: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Patterns.html#//apple_ref/doc/uid/TP40014097-CH36-ID520
Si el conjunto de operaciones se aplicará a todos los elementos de la matriz, es posible reemplazar for-loop con forEach{}
closure y usar el encadenamiento opcional :
var arr: [Int]? = [1, 2, 3]
arr?.forEach{print($0)}
Tengo dos años de retraso, pero creo que esta es la mejor manera.
func maybe<T>(risk: T?, backup: T) -> T {
return risk.maybe(backup)
}
y
extension Optional {
func maybe(_ backup: Wrapped) -> Wrapped {
switch self {
case let .some(val):
return val
case .none:
return backup
}
}
}
y ahora
for i in optionalInt.maybe([]) {
print(i)
}