gpt4 book ai didi

ios - Swift 类型推断需要问号或感叹号

转载 作者:搜寻专家 更新时间:2023-11-01 05:52:44 24 4
gpt4 key购买 nike

阅读 Apple 的 ARC 指南后,我正在慢慢尝试掌握保留周期,但我不清楚的是 swift 的类型推断在推断全局变量时需要可选的问号或强制展开感叹号类的范围。

例如:

import XCTest
@testable import PassionProject

class ItemManagerTests: XCTestCase {

var sut: ItemManager!

override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.

sut = ItemManager()
}

override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}

func tests_ToDoCount_Is_InitiallyZero() {

XCTAssertEqual(sut.toDoCount, 0)
}

func tests_DoneCount_Is_InitiallyZero(){

XCTAssertEqual(sut.doneCount, 0)
}
}

如果我在下一行中遗漏了问号或解释点,它会抛出关于该类没有初始化器的错误:

var sut: ItemManager

我的问题是,类型推断不就是简单地说这个变量将是这种类型吗?如果是这样,如果我们没有给它一个初始值,为什么 Xcode 将它视为一个属性?其次,如果我们从不设置推断类型的值,为什么要强制展开编译?

如果需要,这里是我们用作示例的对象的代码,在此先感谢您更好地掌握:

import Foundation

class ItemManager {

let toDoCount = 0

let doneCount = 0

}

最佳答案

那不是类型推断。如果您声明变量的类型,则不会发生推断。推理就是弄清楚(推理)一个类型是什么如果您没有明确说明

您遇到了 Swift 初始化规则的问题。如果你声明一个类有这个属性:

var sut: ItemManager

那是非可选的,这意味着在初始化完成时它必须有一个值。你没有那样做,所以 Swift 提示你的初始化器。您可以添加一个 init 方法来分配一个值,或者您可以声明它并同时分配一个值——这可能看起来像这样:

var sut: ItemManager = ItemManager()

如果你这样声明:

var sut: ItemManager?

然后它是可选的,这意味着如果你不分配一个值,那么它的值为 nil。您不必在初始化期间分配一个值,因为它已经有一个。

关于ios - Swift 类型推断需要问号或感叹号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41433563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com