繁体   English   中英

为什么将隐式解开的可选内容复制为可选内容?

[英]Why do implicitly unwrapped optionals copy as optional?

在下面的代码中,即使该属性存储为隐式展开的,为什么test.implicitString是可选的? 我相信我需要隐式地解开属性,因为我的初始化程序调用函数来初始化所有值(以便以后可以在update方法中使用相同的函数)。 有没有一种简单的方法可以使这些属性成为非可选属性,同时仍然允许我通过init()中的方法调用来初始化属性?

class Test {
  var implicitString: String!
  init(string: String) {
    implicitString = string
  }
}

let test = Test(string: "Hello world")

let shouldBeString = test.implicitString

// 1: Prints Optional<String> instead of String
print(type(of: shouldBeString))

// 2: Prints Optional("Hello world") instead of "Hello World"
print(String(describing: test.implicitString))

由于您具有用于初始化属性的init方法,因此您只需删除隐式展开即可。

class Test {
  var implicitString: String
  init(string: String) {
    implicitString = string
  }
}

您可以通过设置默认值来摆脱可选参数:

class Test {

    var implicitString: String = ""

    init(string: String) {
        update(value: string)
    }

    func update(value: String) {
        implicitString = value
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM