在SwiftUI中,什么';.modifier和.layout之间的区别是什么

在SwiftUI中,什么';.modifier和.layout之间的区别是什么,swiftui,Swiftui,我似乎找不到使用.modifier或.layout应用ViewModifier之间的任何区别。它们都产生相同的结果。谁都知道这两者有什么不同。没有任何文件 例如,给定此修饰符: struct RedTitle:ViewModifier{ func正文(内容:内容)->某些视图{ 返回内容.foregroundColor(.red).font(.title) } } 这两个视图看起来完全相同: Text(“Hello world!”).layout(RedTitle()) Text(“Hell

我似乎找不到使用.modifier.layout应用ViewModifier之间的任何区别。它们都产生相同的结果。谁都知道这两者有什么不同。没有任何文件

例如,给定此修饰符:

struct RedTitle:ViewModifier{
func正文(内容:内容)->某些视图{
返回内容.foregroundColor(.red).font(.title)
}
}
这两个视图看起来完全相同:

Text(“Hello world!”).layout(RedTitle())
Text(“Hello world!”).modifier(RedTitle())
更新 从Xcode 11 beta 4开始,
布局
修改器被标记为不推荐使用:

extension View {
  @available(*, deprecated, renamed: "modifier")
  @inlinable public func layout<T>(_ layout: T) -> some SwiftUI.View where T : SwiftUI.ViewModifier {
        return modifier(layout)
    }
}
查看该文件,您可以找到
func修饰符的声明:

extension View {
  public typealias Modified<T> = _ModifiedContent<Self, T> where T : SwiftUI.ViewModifier
  @inlinable public func modifier<T>(_ modifier: T) -> Modified<T> where T : SwiftUI.ViewModifier {
        return .init(content: self, modifier: modifier)
    }
}

由于
修改器
布局
都声明为
@inlineable
,因此Swift在
.swiftinterface
文件中包含函数体。我们可以看到,
layout
只调用
modifier
而不做其他事情。

问得好。查看Xcode中的定义,它们看起来非常相似。记住这是beta 2版,我们希望他们在通用汽车公司之前澄清或消除一些问题。文档中有很多漏洞。希望你是对的!我会继续使用。修饰语。它在WWDC期间被提到,但布局没有,所以我认为它更能证明未来。
extension View {
  public typealias Modified<T> = _ModifiedContent<Self, T> where T : SwiftUI.ViewModifier
  @inlinable public func modifier<T>(_ modifier: T) -> Modified<T> where T : SwiftUI.ViewModifier {
        return .init(content: self, modifier: modifier)
    }
}
extension View {
  @inlinable public func layout<T>(_ layout: T) -> Modified<T> where T : SwiftUI.ViewModifier {
        return modifier(layout)
    }
}