【问题标题】:The computed properties & struct in my case在我的情况下计算的属性和结构
【发布时间】:2015-12-02 23:36:41
【问题描述】:

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

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

我知道上面的代码创建了三个计算属性 ExternalInternalNormal,它们的类型都是ServiceType

我想问的是:

  1. 为什么 struct 声明声明一个 init() ?我在阅读 Swift 编程书籍时没有看到这一点。

  2. init(_ value: UInt)value: UInt 之前有一个下划线_ 后跟一个空格是什么意思?

  3. 是不是这样结构在 Swift 中默认有一个 value 属性?上面的代码只是将value的类型显式设置为UInt?

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

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

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    1。 如果结构本身不提供默认初始化器,则它会获得一个默认初始化器:

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

    在这种情况下,结构体提供了一个初始化器,因此您不会获得默认的初始化器。

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

    let service = ServiceType(4)
    

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

    struct ServiceType {
        init(aval value: UInt)
        var value: UInt
    }
    
    let service = ServiceType(aval: 4)
    

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

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

    这些计算属性的返回值都是ServiceType类型。

    5。 在 Swift 中,您不会获得 IntsDoubles、... 的默认值,就像在其他语言(大部分为 0)中一样,除了 Optionals 默认为 nil。所以你必须确保在使用之前初始化值,否则编译器会报错。

    如果您阅读 Swift 书籍的 initialization 章节,所有这些都会变得非常清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多