SwiftUI语法,为什么这段代码有效?

时间:2019-06-13 07:57:04

标签: swift swiftui

在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
}

我很困惑:

  1. “ ContentView_Previews”中的“ previews”属性仅限于View协议。我查看了“组”的定义,但“组”结构似乎并不适合View协议。

  2. 为什么此代码有效?

    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中的语法有效?

0 个答案:

没有答案