为什么隐式解包的选项复制为可选?

时间:2018-04-01 12:54:42

标签: swift 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))

2 个答案:

答案 0 :(得分:2)

由于你有一个初始化属性的init方法,你可以简单地删除隐式解包。

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

答案 1 :(得分:0)

您可以通过设置默认值来删除可选项:

class Test {

    var implicitString: String = ""

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

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

}