当前位置: 首页 > 编程笔记 >

Swift使用参数自定义初始化

鱼旺
2023-03-14
本文向大家介绍Swift使用参数自定义初始化,包括了Swift使用参数自定义初始化的使用技巧和注意事项,需要的朋友参考一下

示例

struct MetricDistance {
    var distanceInMeters: Double

    init(fromCentimeters centimeters: Double) {
        distanceInMeters = centimeters / 100
    }
    init(fromKilometers kilos: Double) {
        distanceInMeters = kilos * 1000
    }
}

let myDistance = MetricDistance(fromCentimeters: 42)
//myDistance.distanceInMetersis 0.42
let myOtherDistance = MetricDistance(fromKilometers: 42)
//myOtherDistance.distanceInMetersis 42000

请注意,您不能省略参数标签:

let myBadDistance = MetricDistance(42) // 错误:参数标签与任何可用的重载都不匹配

为了允许省略参数标签,请使用下划线_作为标签:

struct MetricDistance {
    var distanceInMeters: Double
    init(_ meters: Double) {
        distanceInMeters = meters
    }
}
let myDistance = MetricDistance(42) // distanceInMeters = 42

如果参数标签使用一个或多个属性共享名称,请使用self显式设置属性值:

struct Color {
    var red, green, blue: Double
    init(red: Double, green: Double, blue: Double) {
       self.red= red
       self.green= green
       self.blue= blue
    }
}
           

 类似资料:
  • 如何向Swift中的子类添加自定义初始化器? 我创建了的一个子类,它看起来如下所示: 如果我加上这个,Xcode会抱怨处初始化。所以我想这也不是解决办法。所以我想知道如何在Swift中将自定义初始化器正确地添加到子类中(因为在Objective-C中这似乎不是问题)?

  • Swift 5.x String初始化、定义 1. 字面量初始化字符串 1.1 单行字面量字符串 let str = "some string" 1.2 字面量初始化多行字符串 let str = """ The white Rabbit put on his spectacles. "Where shell I begin, please your Majesty?" he asked. "

  • 问题内容: 我想像这样使用Self in init参数: 我知道我可以在这里使用“ A”,但是我想实现这一点,如果某个类从A继承,那么它的初始化器将知道操作是它的类类型,而不仅仅是A。所以例如,如果我这样写: 然后,我可以使用: 这可能吗? 问题答案: 不必使用或在每个初始化器中使用,您可以简单地重写每个子类的初始化器以使用其自己的类型为。 之所以起作用,是因为的初始值设定项声明的类型应符合,并且

  • 问题内容: 我有一个Swift类,我想看起来像这样: 但是,Swift不喜欢我要传递给初始化程序的事实。我在这里打破某些模式吗?应该如何完成这样的初始化? 问题答案: 您已经找到了Implicitly Unwrapped Optional 的主要用例。 你需要访问的,之前被初始化。 否则,应该 永远 是零,所以你不应该有外部的检查。 因此,您应该声明。

  • 问题内容: 我有一个称为的子类,我想用一个文件初始化。我不确定如何使用名为xib的文件初始化此类 问题答案: 我测试了这段代码,它很好用: 初始化视图并按如下方式使用它: 要么 更新Swift > = 3.x和Swift> = 4.x

  • 我一直在尝试在tkinter中创建一个自定义小部件,没什么特别的,只是一个包含一个条目和两个标签的框架。我希望标签和框架能够访问父应用程序的StringVars(即两个标签的textvariable,以及条目textvariable)。我认为通过将这些名称作为关键字args传递给初始化方法,这应该相当简单,但是我遇到了麻烦。这是我的密码: 我遇到了一个问题,我实际上无法将任何其他内容传递给我的新小