Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Swift中需要使用初始值设定项?_Swift - Fatal编程技术网

为什么在Swift中需要使用初始值设定项?

为什么在Swift中需要使用初始值设定项?,swift,Swift,具有第一个结构: struct example { var name: String var number: Int func show (data: String) { print(data) } } let obj = example(name: "Hello World", number: 2) 第二个结构是: struct example2 { var nameModified: String var numberMod

具有第一个结构:

struct example {
    var name: String
    var number: Int
    func show (data: String) {
        print(data)
    }
}

let obj = example(name: "Hello World", number: 2)
第二个结构是:

struct example2 {
    var nameModified: String
    var numberModified: Int
    init(nameFrom: String, numberFrom: Int) {
        nameModified = nameFrom + "World"
        numberModified = numberFrom + 1
    }
}

let obj2 = example2(nameFrom: "Hello", numberFrom: 1)
我看不出有初始化方法和没有它之间的区别。 可能我没有看到它的正确功能。有人能给我指出正确的方向吗


谢谢

在结构中,默认的init函数是根据结构的属性推断出来的。
因此,您可以编写这个init函数,也可以不编写它:

init(nameFrom: String, numberFrom: Int) { ... }
显式添加init函数的好处是,如果您愿意,您可以在init函数中执行代码。
当然,您还可以添加自定义
便利init
函数

但是,请注意,这不是类的特性。对于这些,您将始终必须显式地编写初始值设定项

您可以安全地执行以下操作:

struct Example {
    var name: String
    var number: Int
}
……然而:

class Example {
    var name: String
    var number: Int
}
…将引发以下错误:

类“Example”没有初始值设定项

相反,您必须执行以下操作:

class Example {
    var name: String
    var number: Int

    init(name: String, number: Int) {
        self.name = name
        self.number = number
    }
}
但是,如果要为类内的属性提供默认值,则不必编写显式初始值设定项:

class Example {
    var name: String?
    var number: Int = 0
}

对于Swift,符合以下条件的类和结构都包含默认初始值设定项

Swift为以下结构或类提供默认初始值设定项: 为其所有属性提供默认值,但不提供 至少有一个初始值设定项本身。默认的初始值设定项只是 创建一个新实例,并将其所有属性设置为默认值 价值观


您总是至少有一个初始值设定项,只是不总是为
struct
ure显式编写。但它总是在那里。请阅读Swift手册。你来自哪种语言?