Swift 中的构建器模式设置方法

2024-03-11

我刚刚从 Android 基础转移到 ios,在 swift 中寻找构建器模式 get 和 set 方法,但找不到类似的东西。仅发现以下内容

var ptype : String? {
    get{
        return self.ptype
    }set (ptype) {
        self.ptype = ptype
    }
}

在使用了这么多用 Swift 编写的库之后,我很少看到人们在 Swift 中使用构建器模式。

我认为 Builder 模式的主要优点已经可以通过 Swift 的其他语言功能来实现。您完全可以创建一个所有参数都是可选的构造函数,并且您几乎只是在 Swift 中重新创建了构建器模式:

class Foo {
    let a: Int
    let b: String
    let c: Bool

    init(a: Int = 0, b: String = "", c: Bool = false) {
        self.a = a
        self.b = b
        self.c = c
    }
}

您可以创建一个Foo像这样:

// You can omit any of the arguments, just like the builder pattern
Foo(
    a: 123
    b: "Hello World"
    c: true
)

我认为这是 Java 中类似的更简洁的版本:

new FooBuilder()
    .setA(123)
    .setB("Hello World")
    .setC(true)
    .build()

但如果你坚持的话,这里有一些非常冗长的 Swift 实现了 Builder 模式:

class Foo {
    private(set) var a: Int = 0
    private(set) var b: String = ""
    private(set) var c: Bool = false

    init(a: Int = 0, b: String = "", c: Bool = false) {
        self.a = a
        self.b = b
        self.c = c
    }

    class Builder {
        private var innerFoo = Foo()

        @discardableResult
        func withA(_ a: Int) -> Builder {
            innerFoo.a = a
            return self
        }

        @discardableResult
        func withB(_ b: String) -> Builder {
            innerFoo.b = b
            return self
        }

        @discardableResult
        func withC(_ c: Bool) -> Builder {
            innerFoo.c = c
            return self
        }

        func build() -> Foo {
            return innerFoo
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 中的构建器模式设置方法 的相关文章

  • 使用 Metal 高效计算 UIImage/CIImage 中有多少透明像素

    我们可以计算有多少个透明像素的最快方法是什么CIImage UIImage 例如 如果我们谈论效率 我的第一个想法是使用Metal Kernel使用任一CIColorKernel左右 但我不明白如何使用它来输出 计数 我还有其他想法 使用某
  • Xcode 6.4 Swift 单元测试无法编译:“GPUImage.h 未找到”“无法导入桥接标头”

    我的 Xcode 项目构建并运行良好 它有 Swift 和 Objective C 代码 它已安装 GPUImage 我向它添加了单元测试 现在它将不再编译 找不到 GPUImage h 文件 导入桥接标头失败 以下是我发现并尝试过的解决方
  • UIView 重写drawRect 导致视图不遵守maskToBounds

    我正在尝试覆盖drawRect 我的自定义视图中的 UIView 方法 但是 我的视图的边界半径定义为 sub NSBundle mainBundle loadNibNamed ProfileView owner self options
  • Cordova iOS 启动画面

    我无法让闪屏停留在页面加载之前 我已经阅读了谷歌搜索第一页 第二页和第三页中的所有条目 我阅读了 stackoverflow 上发布的所有问题 包括一个很好的解释 https stackoverflow com questions 1800
  • NSString 到 NSDate 的转换得到错误的结果[重复]

    这个问题在这里已经有答案了 可能的重复 NSDateFormatter 的时间错误 https stackoverflow com questions 5466419 wrong time from nsdateformatter NSDa
  • React Native ios运行问题

    我是反应本机和运行新手yarn ios我的 React Native 项目不断失败并出现以下错误 构建失败 以下构建命令失败 编译C Users gift Library Developer Xcode DerivedData gainer
  • swift 中闭包和函数作为参数的区别

    我有将近 4 年的 Objective C 经验 并且是 swift 的新手 我试图从 Objective C 的角度理解 swift 的概念 所以如果我错了 请指导我 在目标 c 中 我们有块 可以稍后异步执行的代码块 这绝对是完全合理的
  • 通过应用程序组在应用程序之间通信和保存数据

    iOS 8 昨天发布了一个有关应用程序组的新 API 以前在应用程序之间共享数据和通信有点混乱 我相信这正是应用程序组旨在纠正的问题 在我的应用程序中 我启用了应用程序组并添加了一个新组 但我找不到任何有关如何使用它的文档 文档和 API
  • 如何快速防止标签中出现孤儿?

    我有一个可以有一两行的标签 如果它有两行 我希望第二行至少有两个 或者可能三个 单词 而不仅仅是一个 关于如何使用 swift 实现这一点有什么想法吗 提前致谢 Daniel 编辑 我删除了我愚蠢的第一个想法 这些想法并没有真正的帮助 好吧
  • 如何通过我的 ios 应用程序的指示打开苹果地图应用程序

    我的目标是从 ios 应用程序打开带有方向的地图应用程序 我可以打开地图应用程序 但它没有显示方向 我编写的代码如下 NSString mystr NSString alloc initWithFormat http maps apple
  • 无法识别的选择器调用静态 iOS 库中的类别方法

    我正在使用一些第三方软件来帮助使用 Xcode 4 3 2 编写 iPad 应用程序 该软件是开源的 通常经过设置 因此其代码将与开发人员为应用程序编写的任何代码一起编译 因为我在很多地方使用该软件 所以我决定将其构建为 iOS 模拟器的静
  • Audiokit 修剪音频

    我正在制作音频编辑应用程序 我想修剪我的音频 对于音频编辑 我使用 AudioKit 框架 但我在教程和示例中找不到如何使用此框架修剪音频 异步导出允许设置开始和结束样本 https github com AudioKit AudioKit
  • CIAdditionCompositing 给出不正确的效果

    我正在尝试通过平均其他几个图像来创建图像 为了实现这一点 我首先将每个图像变暗 其系数等于我平均的图像数量 func darkenImage by multiplier CGFloat gt CIImage let divImage CII
  • 调用了 numberOfRowsInSection 但未调用 cellForRowAtIndexPath

    在我的表视图中节中的行数被调用两次但是cellForRowAtIndexPath不叫 我想在 tableView 中显示 Facebook 好友列表 如果 cellForRowAtIndexPath 调用我的问题就解决了 我在这里的数组中得
  • SwiftUI - 从 NSObject 继承的 ObservableObject 在 iOS 13 中不会更新

    我知道 这是 无法在 iOS XX 中工作 问题之一 但我完全陷入困境 所以我有一个ObservableObject继承自的类NSObject 因为我需要听委托方法UISearchResultsUpdating class SearchBa
  • GoogleSignIn ios 附加到谷歌表格

    我目前正在开发一个 iOS 应用程序 该应用程序需要写入登录用户拥有的 Google 工作表 要登录我正在使用的用户GoogleSignInpod 并附加到我正在使用的谷歌表GoogleAPIClientForREST Sheets pod
  • 在completionHandlers中存储值 - Swift

    我正在创建一个completionHandler它返回一个字典 但是当我在另一个类中调用这个方法时 它的值是零 func fetchLatestPosts completionHandler responseDict NSDictionar
  • ArraySlice 中的 Swift [重复]

    这个问题在这里已经有答案了 在数组上使用 prefix 方法后 我得到了所谓的 arraySlice 我怎样才能将其转换为数组 我试图从 FacebookGraphApi 获取 Ints 然后请求前 3 个 前缀 3 并尝试将它们添加到新数
  • 弱变量中间为零

    弱变量什么时候变为零 weak var backgroundNode SKSpriteNode texture SKTexture image initialBackgroundImage backgroundNode position C
  • 未捕获的 Kotlin 异常:kotlin.native.In CorrectDereferenceException:非法尝试访问非共享

    我尝试使用 Kotlin MPP Multiplatform 开发 Android 和 iOS 之间的共享库 但我面临着 iOS 中线程的问题 对于我在 iOS 中的应用程序 我在主线程中建立了对象 但它可能调用其他线程中的函数并抛出此异常

随机推荐

  • 如何使用 Swift 和 iOS 使用 Facebook 身份验证注销用户?

    我尝试四处寻找 但找不到问题的答案 我正在 github 上玩这个应用程序 https github com Yalantis Koloda tree master Example https github com Yalantis Kol
  • 等待第 3 方 JS 库在 Angular 2 服务中完成初始化的最佳方法是什么?

    我正在 Angular 服务中包装第 3 方 JS 库 我如何保证第三方 JS 库已加载 初始化 等 在使用我的服务之前 你能看一下下面的代码并告诉我这是否是一个良好的编码习惯 我正在服务的构造函数中设置一个承诺 最终将实现的承诺 并且我的
  • 当多个 Rust 源文件共享相同名称时,我可以设置 LLDB 断点吗?

    背景 在 Rust 中 您通常有多个名为mod rs 例如 app name src main rs foo mod rs bar mod rs Problem 我找不到区分的方法mod rs设置 LLDB 断点时来自另一个 cargo b
  • 终端未在 Android Studio 中注册输入

    当我在 android studio 中打开终端并键入时 没有任何记录并且光标保持不变 屏幕截图在闪烁之间捕获了光标 但它仍然位于应用程序之后的 gt 旁边 4 个月前 其他人也遇到了同样的问题 Android Studio 终端问题 ht
  • 无法使用 ActionBarSherlock 更改选项卡的背景

    我想更改选项卡的背景 在过去的两天里我尝试了一切 所以我决定在这里发布我的代码 ActionBar 的背景设置正确 但 TABS 保持黑色
  • 将范围变量传递给 ng-click 中的函数

    所以我知道我一定错过了这个问题的 javascript 的一些基本部分 但无论如何它都是这样的 我有一个控制器 其中声明了一个变量 scope IsStartDatePickerHidden true scope IsEndDatePick
  • 摩卡作为图书馆

    我想使用 mocha node js 测试框架 而不是 ruby 模拟库 作为库 而不是使用 mocha 可执行文件来运行我的测试 是否可以通过这种方式运行摩卡测试 这些示例都只是调用 mocha 库 假设它们已经是 require 并且
  • 使用引导网格系统嵌套行?

    我想要 1 个较大的图像和 4 个 2x2 格式的较小图像 如下所示 我最初的想法是将所有东西都放在一排 然后创建两列 并在第二列中创建两行和两列以创建 1x1 和 2x2 效果 但是 这似乎不可能 或者我只是做得不正确 引导版本 3 x
  • 如何编写 Webpack 插件,根据其他模块动态地将模块添加到捆绑包中?

    我在为翻译服务编写 Webpack 插件时遇到问题 目标是 获取编译期间所有必需模块的名称 和源代码 我需要能够扫描包含的源代码以获取特殊的t 函数用法 但我只想扫描那些将包含在捆绑包中的模块 根据构建配置 这些模块可以是所有项目模块的子集
  • 成功插入数据后如何清除单选按钮列表?

    任何人都可以帮我解决这个简单的问题 如何在提交表单后清除单选按钮列表的选择 我需要在我的 ASP NET Web 应用程序中使用它 当用户单击清除按钮时 我需要清除单选按钮列表的选择 提前致谢 你可以 设置 myrbList Selecte
  • 删除带有嵌入空格的路径中的所有 .SVN 文件夹

    In 这个问题 https stackoverflow com questions 5935776 how to delete svn folders in my source tree 13850323 13850323以及其他一百个地方
  • Python - Pandas:给定行中最小值的数字/索引

    我有一个 pandas 数据框 具有一行和多列 我想获取给定行中最小值的列号 索引 我找到的代码是 df columns get loc colname 上面的代码要求提供列名称 我的数据框没有列名 我想获取最小值的列位置 Use argm
  • Android Studio:设计视图中“创建景观变化”的按钮在哪里?

    我在哪里可以找到按钮创造景观变化 https stackoverflow com questions 28815769 android studio creating landscape layouts answer 29467041 在我
  • 如何在 SQLiteDatabase 查询中测试光标是否为空

    我有一个由以下代码创建的 SQL 表 public void onCreate SQLiteDatabase db db execSQL CREATE TABLE TABLE NAME ID INTEGER PRIMARY KEY AUTO
  • 布尔值 FALSE 和 TRUE 可以重新定义吗

    我正在读一本关于 PHP 以及如何使用 PHP 的书TRUE and FALSE 它说 事实上 小写版本更稳定 因为 PHP 不 允许您重新定义它们 大写的可以重新定义 我尝试重新定义TRUE and FALSE 但没有成功 我谷歌重新定义
  • 存储大量数据:数据库还是文件系统?

    假设我的应用程序创建 存储和检索大量条目 数千万 每个条目具有可变数量的不同数据 例如 某些条目仅具有几个字节 例如ID 标题 而某些条目可能具有兆字节的补充数据 每个条目的基本结构相同 并且采用 XML 格式 条目是任意创建和编辑的 很可
  • 从 CouchDB 解析 JSON 时如何超越“total_rows”

    我使用以下 jQuery 代码从 CouchDB 获取 JSON 文件 Function getURL var api url http 127 0 0 1 5984 couchcontentqueue design DocCollecti
  • 子类化后的委托?

    抱歉 我无法为标题提出一个简短的问题 如果我使用委托协议和属性对一个类进行子类化 我的委托是否仍然需要实现超类的委托协议 或者我是否必须为子类定义一个新的委托协议 就我而言 我细分了UIImagePickerController UIIma
  • Google 语音 API - php 不返回任何内容

    我的代码受到用于语音转文本的全双工谷歌语音 API 的 php 版本的启发 http mikepultz com 2013 07 google speech api full duplex php version http mikepult
  • Swift 中的构建器模式设置方法

    我刚刚从 Android 基础转移到 ios 在 swift 中寻找构建器模式 get 和 set 方法 但找不到类似的东西 仅发现以下内容 var ptype String get return self ptype set ptype