我似乎找不到使用.modifier或.layout应用的区别。两者产生的结果是一样的。任何人都知道这两者有什么区别。根本就没有任何文件。
例如,给定此修饰符:
struct RedTitle: ViewModifier {
func body(content: Content) -> some View {
return content.foregroundColor(.red).font(.title)
}
}这两个视图看起来是一样的:
Text("Hello world!").layout(RedTitle())Text("Hello world!").modifier(RedTitle())发布于 2019-06-19 17:22:15
更新
从Xcode 11 beta 4开始,已将layout修饰符标记为“不推荐”:
extension View {
@available(*, deprecated, renamed: "modifier")
@inlinable public func layout<T>(_ layout: T) -> some SwiftUI.View where T : SwiftUI.ViewModifier {
return modifier(layout)
}
}原创
Xcode 11 beta 2没有区别,但这并不意味着永远不会有区别。layout可能是从旧的设计中遗留下来的,需要删除,或者稍后的beta版会使它的行为有所不同。
SwiftUI导出的完整接口可在此文件中找到:
/Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64.swiftinterface查看该文件,您可以找到func modifier的声明。
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)
}
}以及func layout的声明
extension View {
@inlinable public func layout<T>(_ layout: T) -> Modified<T> where T : SwiftUI.ViewModifier {
return modifier(layout)
}
}由于modifier和layout都被声明为@inlinable,Swift在.swiftinterface文件中包含了函数体。我们可以看到,layout只调用modifier,而不做任何其他操作。
https://stackoverflow.com/questions/56672602
复制相似问题