Swift:为什么我需要在声明中打开非可选变量

Swift:为什么我需要在声明中打开非可选变量,swift,syntax,optional,forced-unwrapping,Swift,Syntax,Optional,Forced Unwrapping,我不明白为什么在测试中需要在声明中“强制展开”变量类型 让我举一个更清楚的例子: class testSomething: XCTestCase { var mockService: MockService! override func setUp() { mockService = MockService() } ... 因此,我们的目标显然是在每次运行测试时创建一个新的模拟服务实例。我只是不明白为什么我需要将这个变量声明为MockService类型。在这个上下文

我不明白为什么在测试中需要在声明中“强制展开”变量类型

让我举一个更清楚的例子:

class testSomething: XCTestCase {

  var mockService: MockService!

  override func setUp() {
    mockService = MockService()
  }
  ...
因此,我们的目标显然是在每次运行测试时创建一个新的模拟服务实例。我只是不明白为什么我需要将这个变量声明为
MockService类型。在这个上下文中,type后面的感叹号到底是什么意思


需要明确的是,当我声明
mockService:mockService
Xcode时,我的测试类没有初始化器

必须在声明行中初始化非可选变量

var mockService = MockService()
或者在
init()方法中

var mockService : MockService

init() {
  mockService = MockService()
}

如果不可能,则将变量声明为强制展开,并确保无论何时使用该变量,该变量都不是
nil
。然后,它的行为类似于非可选的。

在这种情况下:
mockService
未在适当的位置或构造函数中初始化,请尝试注释掉
。看看这个(第二个答案):这里是对
隐式WrappedOptional
s的用例的一个很好的概述。
var mockService:mockService
声明类型为
隐式WrappedOptional
的变量。它不会“在声明中强制展开变量类型”我想这是一个复制品。是的,我不知道术语“代码>隐式损坏可选的< /代码> @ d.aNielngy,请您把您的评论作为回复,我会把它标记为最好的答复。