首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SwiftUI中,.modifier和.layout有什么区别?

在SwiftUI中,.modifier和.layout有什么区别?
EN

Stack Overflow用户
提问于 2019-06-19 16:55:37
回答 1查看 780关注 0票数 3

我似乎找不到使用.modifier.layout应用的区别。两者产生的结果是一样的。任何人都知道这两者有什么区别。根本就没有任何文件。

例如,给定此修饰符:

代码语言:javascript
复制
struct RedTitle: ViewModifier {
    func body(content: Content) -> some View {
        return content.foregroundColor(.red).font(.title)
    }
}

这两个视图看起来是一样的:

代码语言:javascript
复制
Text("Hello world!").layout(RedTitle())
代码语言:javascript
复制
Text("Hello world!").modifier(RedTitle())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-19 17:22:15

更新

从Xcode 11 beta 4开始,已将layout修饰符标记为“不推荐”:

代码语言:javascript
复制
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导出的完整接口可在此文件中找到:

代码语言:javascript
复制
/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的声明。

代码语言:javascript
复制
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的声明

代码语言:javascript
复制
extension View {
  @inlinable public func layout<T>(_ layout: T) -> Modified<T> where T : SwiftUI.ViewModifier {
        return modifier(layout)
    }
}

由于modifierlayout都被声明为@inlinable,Swift在.swiftinterface文件中包含了函数体。我们可以看到,layout只调用modifier,而不做任何其他操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56672602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档