在下面的代码中,为什么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
  }
}

关于swift - 为什么将隐式解开的 optional 内容复制为 optional 内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49598264/

10-10 20:41