在SwiftUI中,我注意到了这段代码:
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
Group {
ContentView()
ContentView()
}
}
}
“ ContentView”是由我定义的,如下所示:
struct ContentView : View {
var body: some View {
.....
}
}
'Group'结构在SwiftUI中定义:
public struct Group<Content> where Content : View {
public init(content: () -> Content)
public typealias Body = Never
}
我很困惑:
“ ContentView_Previews”中的“ previews”属性仅限于View协议。我查看了“组”的定义,但“组”结构似乎并不适合View协议。
为什么此代码有效?
Group {
ContentView()
ContentView()
}
“组”初始化程序采用不带参数的闭包,并返回Content类型。 但是在上面的闭包中,有两个“ ContentView()”表达式,那么实际上返回了哪个?
我用一些代码对其进行测试:
protocol SomeProtocol { }
struct Group<Content> where Content : SomeProtocol {
init(content: () -> Content) { }
}
struct ContentView: SomeProtocol {
private let str: String
init(str: String) {
self.str = str
}
}
let group = Group {
ContentView(str: "123")
ContentView(str: "456")
}
但是编译器忽略了抱怨“ ContentView(str:“ 456”)“这一行的错误。
那么为什么SwiftUI中的语法有效?