计算出的属性&我个案中的结构

时间:2015-09-07 12:01:14

标签: ios swift

我正在学习Swift,我从以下项目中看到了一些代码:

struct ServiceType {
    init(_ value: UInt)
    var value: UInt
}
var External: ServiceType { get }
var Internal: ServiceType { get }
var Normal: ServiceType { get }

据我所知,上面的代码创建了三个计算属性 ExternalInternal&所有类型为Normal的{​​{1}}。

我想问的是:

  1. 为什么ServiceType声明声明了一个init()?当我阅读Swift编程书时,我没有看到这个。

  2. struct_之前的空格value: UInt后跟空格是什么意思?

  3. 在Swift中默认情况下struct是否具有init(_ value: UInt)属性?上面的代码只是明确地将value的类型设置为UInt?

  4. 每个属性中的空值是什么意思?它返回什么价值?

  5. 操作系统是否随机将UInt值分配给每个属性的值?

1 个答案:

答案 0 :(得分:2)

1。 如果一个struct没有自己提供一个默认的初始化器,它就会得到一个默认的初始化器:

struct ServiceType {
    var value: UInt
}

// default initialize with an specified parameter name "value" (called external name)
let service = ServiceType(value: 4)

在这种情况下,struct提供了一个初始化程序,因此您不会获得默认值。

2。 下划线表示您没有外部名称:

let service = ServiceType(4)

用不同的名称替换下划线,名称现在是外部名称:

struct ServiceType {
    init(aval value: UInt)
    var value: UInt
}

let service = ServiceType(aval: 4)

3。 如果我理解你正确的结构通常默认没有值属性,在这种情况下,value属性被声明为类型Uint。 {I}被推断为var value = 0类型。

4。 如果您在协议Int中看到此代码意味着它只返回一个值而不设置一个({ get })。

这些计算属性的返回值都是{ get set }类型。

5。 在Swift中,您不会获得ServiceTypeInts的默认值,...与其他语言(大多数为0)不同,默认情况下Doubles除外Optionals。所以你必须确保在使用它之前初始化该值,否则编译器会抱怨。

如果您阅读Swift书的initialization章节,所有这一切都会非常清楚。