开始使用 Swift 中的结果生成器

使用 SwiftUI 的 iOS 软件工程师应该很熟悉这个语法:

VStack ( alignment : .leading ) { Image ( hotel.picture ) Text ( hotel.name ) Text ( hotel.price ) } _ _ _ _ _ _ _

在块内,有三个语句,它们是VStack. 这些语句仅由换行符分隔。

本质上,这段代码告诉您,将 iPhone 连接到 Mac 并简化工作流程的 13 种方法您有一个垂直堆栈 ( VStack),它由三个堆叠组件组成,包括一个图像 ( Image)、一个文本 ( Text) 和另一个文本 ( Text)。

您是否知道您还可以在常规 Swift 代码中使用此语法,在 iPhone 上删除多个联系人的 5 种方法而不仅仅是在 SwiftUI 中?

这种语法称为结果构建器,以前称为函数构建器。如何在 iPhone 和 iPad 上使用 Control + F 命令结果构建器从 v5.4 开始就是 Swift 的一部分,这意味着您可以在 Linux 中使用这个特性。在本文中,如何在 Android 和 iPhone 上禁用应用内购买我们将探讨如何使用该buildBlock函数以及更高级的函数(如buildOptional、buildArray和 )编写结果生成器buildExpression。

我们将涵盖:

  • 结果构建器的重要性

  • 在 XCode 上设置 Playground

  • 构建一个结果生成器buildBlock

  • 使用构建可选条件buildOptional

  • 使用buildArray数组

  • 用于buildExpression接受块中的不同元素

结果构建器的重要性

要了解结果生成器的重要性,您需要想象一种您没有结果生成器功能的情况。

例如,如何访问 iPhone 上的剪贴板:3 种简单方法您可以尝试创建一个简单的函数来接受将连接在一起的字符串组件,而不是使用它来接受将垂直堆叠的组件。假设您提供函数:, , 。它会给你这个结果:a VStack"Hello World!""Hello LogRocket!""Hello Swift!""Hello World!, Hello LogRocket!, Hello Swift!"

你打算怎么做?如何在不重置的情况下清除 iPhone 上的其他存储一种简单的方法是创建一个接受组件的函数:

func StringStack ( _ a : String , _ b : String , _ c : String ) -> String {

a + ", " + b + ", " + c

}

然后,您可以调用此函数:

StringStack ( "Hello World!" , "Hello LogRocket!" , "Hello Swift!" )

它工作得很好,但看起来不是很干净。如何在 iOS 16 上删除 iPhone 壁纸即使你按行拆分参数,它看起来仍然很难看:

StringStack ( "你好,世界!

“你好LogRocket !”,

“你好斯威夫特!”

)

逗号毁了一切!但我们想要摆脱的不仅仅是烦人的逗号。如何在 iPhone、iPad 和 Mac 上的照片应用程序中添加面孔还有一个因素。

假设您将这三个字符串与一个逗号组合在一起,但您希望可以选择将其更改为其他内容。您可以修改功能:

func StringStack ( _ separator : String , _ a : String , _ b : String , _ c : String ) -> String {

a + separator + " " + b + separator + " " + c

}

但是当你执行这个的时候,如何在 iPhone 14 Pro 系列上自定义 Always On Display:6 个炫酷技巧问题就很明显了:

StringStack ( "-" , "你好世界!,

“你好LogRocket !”,

“你好斯威夫特!”

)

在上面的代码块中,如何在 Android 和 iOS 上玩 Steam 游戏很难区分是要将四个字符串堆叠在一起还是将三个字符串堆叠在一起,并用短划线分隔。

如果您使用的是结果生成器,则可以这样做:

StringStack ( separator : "-" ) { "Hello World!" “你好 LogRocket!” “你好斯威夫特!” }

分隔符和字符串组件之间的目标分隔变得非常清晰。在 iPhone 和 iPad 上反转或翻转图片的 6 种方法分隔符参数不会与您要连接的字符串混为一谈。

在 XCode 上设置 Playground

打开XCode。然后创建一个 Swift Playground 应用程序。如何在 iPhone、iPad 和 Mac 上的 Apple Music 中创建智能播放列表这样做之后,导航到菜单中的文件,然后单击新建 > 游乐场…。将其命名为ResultBuildersPlayground。您将看到导入UIKit并声明变量greeting 的默认代码。然后,清空代码。

但是,由于 Swift 上的结果生成器功能不依赖于 iOS 或 Mac,如何从 iPhone、iPad、Mac 或 iCloud 上的“查找”中删除设备因此您不必使用 XCode。您可以在 Linux 上使用 Swift,甚至可以使用在线 Swift 编译器,例如SwiftFiddle。

构建一个结果生成器buildBlock

继续上一个示例,假设您想将StringStack方法转换为声明性代码。如何自动删除 Telegram 上的消息将以下代码添加到游乐场:

@resultBuilder class ConvertFunctionToResultBuilder { static func buildBlock ( _a : String , _b : String , _c : String ) -> String {

a + ", " + b + ", " + c

} }

刚才,您创建了一个包含buildBlock静态方法的类并用@resultBuilder. 在 中buildBlock,您添加了组合字符串的函数。查找和恢复丢失的 iPhone 笔记的 6 种方法ConvertFunctionToResultBuilder不必是一个类——它可以是一个枚举或一个结构。但是在类/枚举/结构内部,关闭 iPhone 请勿打扰的 12 种方法必须有一个名为buildBlock.

接下来,您可以像在 SwiftUI 中一样创建声明性代码:

@ConvertFunctionToResultBuilder func MyFirstDeclarativeCode () -> String { "Hello World!" “你好 LogRocket!” “你好斯威夫特!” }

现在,更像是这样。如何向您的电报联系人推荐个人资料图片在您看到完整结果之前的最后一步!

让我们执行新功能:

打印(MyFirstDeclarativeCode ())

最后,您可以编译代码并运行它。这是结果:

你好世界!,你好LogRocket !,你好Swift !

一切都很好!除了,如果你看一下组合字符串操作的实现,如何在 iPhone 上取消发送电子邮件你只能接受三个组件。我们想要更加灵活。

您可以使用可变参数来实现这一点。如何将照片和文件从 Google 云端硬盘下载到 iPhone将方法更改buildBlock为如下所示:

static func buildBlock ( _ strings : String ...) -> String {

strings . 加入(分隔符:“,” )}

然后将另一个字符串添加到如何在 iPhone 上将慢动作视频转换为普通视频MyFirstDeclarativeCode:

@ConvertFunctionToResultBuilder func MyFirstDeclarativeCode () -> String { "Hello World!" “你好 LogRocket!” “你好斯威夫特!” “你好结果生成器!” }

重新编译代码并运行它得到这个结果:

Hello World !, Hello LogRocket !, Hello Swift !, Hello Result Bulders !

使用构建可选条件buildOptional

块中的内容不必像字符串那样简单。如何在 iPhone 上使用连拍模式拍摄多张照片它们可以是if条件,这意味着元素可以根据变量或条件显示。

假设您想为酒店的客人制作早餐。您可以为此目的创建一个结果生成器:

@resultBuilder struct BreakfastBuilder { static func buildBlock ( _ food : String ...) -> String {

food . 加入(分隔符:“,” )}

static func buildOptional ( _ drink : String ?) -> String { return drink ?? “” } }

buildOptional请注意,如何阻止播客应用程序在 iPhone、iPad 和 Mac 上自动下载节目在 required 旁边调用了另一个静态函数buildBlock。

您可以创建另一个函数来显示真正的早餐:

@BreakfastBuilder func makeBreakfast ( _ drink : Bool ) -> String { "Egg" "Bread" if drink { "Milk" } }

在这里,您会看到在通常的字符串旁边有一个条件语句。如何在 iPhone 14 Pro 系列上拍摄 48MP 照片这个条件块将被执行,结果将被发送到buildOptional. 然后的结果将与其他字符串一起buildOptional发送到。buildBlock

您可以在不同的条件下执行它:

打印(makeBreakfast (假))打印(makeBreakfast (真))

早餐会根据您是否要包含饮料而有所不同:

鸡蛋,面包,鸡蛋,面包,牛奶

用于buildEither构建if条件

对于buildOptional,您的if条件没有替代分支或else条件。在 iPhone 的图片上添加表情符号的 4 种简单方法但是有了buildEither,你可以拥有它。

您可以使用相同的示例,如何阻止 iPhone 相机自动切换到微距模式但这次使用buildEither:

@resultBuilder struct BreakfastBuilder2 { static func buildBlock ( _ food : String ...) -> String {

food . 加入(分隔符:“,” )}

static func buildEither ( first drink : String ) -> String { return drink

}

static func buildEither ( second drink : String ) -> String { return drink + "with sugar" } }复制代码

因此buildOptional,您添加了buildEither而不是 ,检查您的 iPhone 是否在保修期内的 4 种最佳方法但您需要其中两个功能,而不仅仅是一个。从 iPhone 到三星电视屏幕镜像的 4 种最佳方式请记住,您将在结果生成器函数的块中有一个if条件和一个条件。else

然后您可以使用此结果构建器注释该函数:

@BreakfastBuilder2 func makeBreakfast2 ( _ drinkCoffee : Bool ) -> String { "Egg" "Bread" if drinkCoffee { "Coffee" } else { "Tea" } }

Coffee将发送给第一个buildEither,在 iPhone 上反转屏幕或图片颜色的 9 种方法同时Tea将发送给第二个buildEither。您可以执行函数来确认这一点:

打印(makeBreakfast2 (假))打印(makeBreakfast2 (真))

这是结果:

鸡蛋、面包、糖茶鸡蛋、面包、咖啡_

_

请记住,如何将新小部件添加到 Mac 的仪表板第二个buildEither参数附加了.with sugar

使用buildArray数组

您在已使用结果构建器注释的函数块中使用字符串。如何在 Mac OS X 中安装新字体但是,如果您也可以使用字符串数组不是很好吗?网守指南:如何使用它安全安装 Mac 应用程序例如,您可能希望将食物和饮料组合在一起。

这是buildArray派上用场的地方。

首先,创建一个结果生成器,如下所示:

@resultBuilder struct BreakfastBuilder3 { static func buildBlock ( _ food : String ...) -> String {

food . 加入(分隔符:“,” )}

static func buildArray ( _ drinks : [ String ]) -> String { "Drinks: " + drinks . 加入(分隔符:“,” )} }

这一次, add buildArray,什么是 Mac 恢复模式以及如何使用它它接受一个数组并返回一个String,与接受的参数类型相同buildBlock。返回的结果将发送到buildBlock稍后。

现在,添加将使用此结果构建器注释的函数:

@BreakfastBuilder3 func makeBreakfast3 () -> String { "Egg" "Bread" for d in [ "Coffee" , "Tea" ] { "\(d)" } }

要在块中传递数组参数,您不需要传递文字数组,什么是语音控制以及如何在 Mac 上使用它而是创建一个 for 循环语句。在每次迭代中,添加一个数组元素。在本例中,它是一个字符串。稍后,如何从 Mac 屏幕上截图取任何文本所有这些字符串将被放入一个数组中并发送到buildArray.

然后你需要执行这个函数:

打印( makeBreakfast3 ())

结果显示来自以下的连接字符串buildArray:

鸡蛋、面包、饮料:咖啡、茶

用于buildExpression接受块中的不同元素

在我们之前的所有示例中,我们都String在块中使用了 -typed 元素。Mac 上的 Microsoft AutoUpdate 是什么以及如何删除它但是,如果您想将另一种类型的元素与字符串一起使用怎么办?您可以通过buildExpression在块中使用来处理不同种类的元素。

像往常一样,如何在 Mac 上更改时间和地区创建一个结果生成器:

@resultBuilder struct BreakfastBuilder4 { static func buildBlock ( _ food : String ...) -> String {

food . 加入(分隔符:“,” )}

static func buildExpression ( _ food : String ) ->字符串{

食物

}

static func buildExpression ( _ tissueAmount : Int ) -> String { "\(tissueAmount) 块组织" } }

您添加了两个buildExpressions。一个是 for String,如何在 Mac 上添加和删除语言它只按原样返回参数。但第二个buildExpression更有趣,因为它接受一个整数。如何在 Mac 上使用热角然后它在字符串中插入整数参数。

现在,是时候创建一个接受字符串和整数的函数了:

@BreakfastBuilder4 func makeBreakfast4 () -> String { "Egg" "Bread" 5 }

Egg并将Bread发送到第一个buildExpression。如何修复一直冻结的 Mac但是5会被发送到第二个buildExpression。如何在 Mac 上安全弹出外部驱动器然后将这两个的结果buildExpressions发送到buildBlock.

最后,执行这个函数:

打印( makeBreakfast4 ())

结果符合预期:

鸡蛋、面包、纸巾5张_

结论

在本文中,我们使用了结果构建器功能,如何在 Mac 上录屏可以使您的代码像 SwiftUI 中的代码一样具有声明性。我们探讨了使用结果生成器的原因,这是为了让代码看起来更干净。然后,我们使用静态方法@resultBuilder创建结果生成器buildBlock来定义块的实现。如何删除 Slack 频道最后,我们学习了其他积木制作方法,如buildOptional、buildEither、buildArray,并buildExpressions创建更高级的积木。

猜你喜欢

转载自blog.csdn.net/weixin_47967031/article/details/130013961