gpt4 book ai didi

swift - 在 Swift 中将变量分配给下划线

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:57 24 4
gpt4 key购买 nike

在研究了关于 Swift 中下划线的 stackoverflow 之后,我了解到下划线意味着 a) 忽略此函数和 b) 您可以在使用该方法时省略参数名称。我不明白的是,如果我们将变量分配给下划线会发生什么?通过为变量分配下划线,这会消除来自 Xcode 的编译器警告,该警告显示“初始化程序的结果未使用”,但如果您不以任何方式使用此变量,它不会显示警告。

这个变量是否仍然创建并存储在内存中,还是被编译器一起忽略,就好像它是一行被注释掉的代码?

例如:

func test_ToDoItem_TakesTitle(){

let firstToDoItem = ToDoItem(title: "First Instance Title")

_ = ToDoItem(title: "First ToDoItem instance")

XCTAssertEqual(firstToDoItem.title, "First Instance Title")

}

下面这行代码是被创建并存储在内存中还是被忽略了:

 _ = ToDoItem(title: "First ToDoItem instance")

希望这个问题是有道理的,因为我想注意 Xcode 中每 block 内存的使用方式。

最佳答案

Is this variable still created and stored in memory or is it ignored by the compiler all together as if it were a line of code that is commented out?

这完全取决于 ToDoItem 类的实现。

该行乍一看似乎是多余的。但是想一想,如果 ToDoItem 的初始化器中有你想要执行的东西怎么办?执行该操作的唯一方法是创建 ToDoItem 的新实例,但单独编写 ToDoItem(...) 会导致警告。这就是您使用通配符模式来消除警告的原因。

这在 CoreData 中特别有用。有时您只想保存一个新的托管对象而不更改任何属性。你会写:

_ = MyEntity(entity: ..., insertInto: ...)

因为您只想要初始化程序的副作用 - 保存一个新的托管对象。

如果 ToDoItem 的初始化程序将 self 分配给其他东西,那么是的,ToDoItem 将在内存中。例如,

SomeClass.someStaticProperty = self

如果你不这样做,ToDoItem 将被取消初始化

关于swift - 在 Swift 中将变量分配给下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41413506/

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