【问题标题】:Swift: Why do I need to unwrap non optional variable in declarationSwift:为什么我需要在声明中解包非可选变量
【发布时间】:2015-09-29 07:29:58
【问题描述】:

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

让我举个例子更清楚:

class testSomething: XCTestCase {

  var mockService: MockService!

  override func setUp() {
    mockService = MockService()
  }
  ...

所以目标显然是在每次运行测试时创建一个新的模拟服务实例。我只是不明白为什么我需要将此变量声明为MockService! 类型。在这种情况下,类型后面的感叹号到底意味着什么?

明确一点,当我声明 mockService: MockService Xcode 抱怨我的测试类没有初始化器时

【问题讨论】:

  • 在这种情况下:mockService 未就地初始化,也未在构造函数中初始化,请尝试注释掉 !。看看这个(第二个答案):stackoverflow.com/questions/24006975/… 这里是ImplicitlyUnwrappedOptionals 用例的一个很好的概述。
  • var mockService: MockService! 声明了一个类型为 ImplicitlyUnwrappedOptional<MockService> 的变量。它不会“在它的声明中强制解包变量类型”。 – 我认为这是 stackoverflow.com/questions/24006975/… 的副本。
  • 是的,我不知道implicitly unwrapped optional@DánielNagy 这个词,您能否将您的评论作为回复发表,我会将其标记为最佳回复。

标签: swift syntax optional forced-unwrapping


【解决方案1】:

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

var mockService = MockService()

或在init() 方法中

var mockService : MockService

init() {
  mockService = MockService()
}

如果无法做到这一点,请将变量声明为强制解包,并确保无论何时使用该变量都不是nil。然后它的行为就像一个非可选的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    相关资源
    最近更新 更多