Я хочу перебрать массив String ?, строку, повторяющую пару, но я не могу правильно сформировать "for case let (a, b) in array".
Лучшее, что я придумал, - это создать временную структуру {String ?, String} и создать массив временных структур, а затем повторить его, но я бы хотел пропустить этот шаг.
Ниже приведен базовый пример с последним циклом for, показывающим сообщения об ошибках Xcode.
class Foo {
var s1: String?
var s2: String?
var s3: String?
}
let foo = Foo()
foo.s1="Test1"
foo.s2=nil
foo.s3="Test3"
let fooArray = [foo.s1, ", ", foo.s2, "; ", foo.s3,"."]
let fooArray1 = [foo.s1,foo.s2, foo.s3]
var text:String = ""
for case let prop? in fooArray1 {
text = text + prop + " / "
}
print(text)
// The above works but now I want to use a different separator
//base on the property name
text=""
for case let (prop, sep) in fooArray { // Error <= Expression Type
// [String?] is ambiguous without more context
text = text + prop + sep
}
print(text)
Вот то, что я придумал
struct temp {
var prop:String?
var sep:String
init(_ prop:String?, _ sep:String) {
self.prop=prop
self.sep=sep
}
let ary:[temp] = [ temp(foo.s1,", "), temp(foo.s2,"; "), temp(foo.s3,".") ]
text = ""
for a in ary {
if let p = a.prop {
text = text + p + a.sep
}
}
print (text)
Есть ли другой способ, просто используя цикл for
for (a,b) in fooArray {
...
}