首先,ViewModifier是一个协议类型。

我们先来看一下官方例子:

struct BorderedCaption: ViewModifier {
func body(content: Contswiftkeyent) -> some View {
content
.font(.caption2)
.padding(10)
.overlay(
RoundedRectangle(coappleidrnerRadius: 15)
.stroke(lineWidth: 1)
)
.foregroundColor(Color.xcode病毒检测工具blue)
}
}

这里我们写了一个结构体BorderedCaption 遵循 ViewModifier协议。方法Swift体返回了一个view,这个view有一些我们prefer的格式。其实ViewModifier本质上就是这个function,它也只有这一个body方法,接收Content,然后返回一个view。macosx是什么文件夹

可这个Content又是什么东西呢?

如果我们跳到它的Definition ,我们可以看到:

@available(iOS 13.0, macOS 10.1macos系统下载5macos是什么意思, tvOS 13.0, watchOS 6.0, *)
public protocol ViewModifier {
/// Theswiftui编程 type of view representing tmacoscatalinahe body.
associatedtype Body : View
/// Gets the current body of the caller.
///
/// `cswiftcode代码查询ontent` is a proxy for tappreciatehe view that will have the modifier
/// represented by `Self` applied to it.
func body(content: Self.Content) -> Self.Body
/// The content view type paswiftui会写安卓吗ssed to `body()`.
typealias Content
}

它是一个typealias。可是还是没有解决我们的答案,这是什么东西?

Xcode编程为如果符号macos系统下载以下划线(_)开头,则不会显示SDK中的公共符号。 但是,通过在.swiftinterface文件中查找SwiftUI,我们可以看到ViewModifier的真实定义,包括隐藏的符号。

@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public protocoswiftui案例l Viswiftui官网ewModifier {
static func _makeView(modifier: SwiftUI._GraphValue<Self>, inputs: SwiftUI._ViewInputs, body: @escaping (SwiftUI._Graph, SwiftUI._ViewInputs) -> SwiftUI._ViewOutputs) -> SwiftUI._ViewOutputs
static func _makeViewList(modifier: SwiftUI._GmacosbigsurraphValue<Self>, inputs: SwiftUI._ViewListInputs, body: @escaping (SwiftUI._Graph, SwiappearftUI._ViewListInputs) -> SwiftUI._ViewListOutputs) -> SwiftUapproveI._Viemacos版本太老无法更新wListOutputs
associaswift代码tedtype Body : SwiftUI.View
func body(swift选手content: Self.Content) -> Self.BodySwiftUI
typealias Content = SwiftUI._ViewModifier_Conteswiftlynt<Self>
}

我们可以看到Content是_ViewModifier_Content 的别名,该结构没有定义任何有趣的公共接口,但是(在扩展名中)符合macos系统下载View。 因此这告诉我们,当我们编写自己的ViewModifier时,我们的body方法将接收某种Vswiftui案例iew(特定类型由框架定义,我们可以将其称为Content),并返回某种View(我swiftui开发安卓swift什么意思可以选择特定的返回类型)。

然后xcode汽车呢,我们通常给View在写一个扩展。

extension View {
func bordermacos版本太老无法更新edCaption() -&xcode教程gt; some VieXcodew {
modifier(Bordemacosx是什么文件夹redCaption())
}
}

这里我们写了一个方法borderedCaption,返回值modifier接收一个遵循ViewModifier的实例化对象BorderedCaption()

然后我们就可以用了:

Image(systemName: "bus")
.rapp安装下载esswift代码ixcode汽车zable()
.frame(width:50, height:50)
Text("Downtown Bus")
.borderedCaption()

SwiftUI ViewModifier

我们可以看swiftui编程到,Text可以直接调用我们自己封装的Viswiftui案例ewModifer,改变样式。

当然,如果你不appreciate想扩展View.
你也可以这样用:

Image(systemName: "bus")
.resizable()
.fmacosxrame(width:5xcode怎么编写c语言0, height:50)
Textswiftui原理("Downtowapplen Bus")
.modifier(Borxcode中文deredCapapproachtion())