在Swift中为Underscore分配变量

在Swift中为Underscore分配变量,第1张

概述在研究了 Swift中关于下划线的stackoverflow之后,我理解下划线意味着a)忽略这个函数,b)你可以在使用方法时省略参数名.我不明白如果我们将变量分配给下划线会发生什么?通过为变量分配下划线,这会使来自Xcode的编译器警告静默读取“初始化程序的结果未使用”,但如果不以任何方式使用此变量,则不会显示警告. 这个变量是否仍然被创建并存储在内存中,或者被编译器一起忽略,好像它是一行被注释掉 在研究了 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中每个内存的使用方式.

解决方法 此测试显示对象在对象超出范围时创建然后销毁:

class TodoItem {    var Title = ""    init(Title: String) {        self.Title = Title    }    deinit {        print("deinit \(Title)")    }}func test() {    print("test")    _ = TodoItem(Title: "First")    _ = TodoItem(Title: "Second")    print("end test")}func calltest() {    print("calling test()...")    test()    print("back from test()")}calltest()

输出:

06001

扩展测试:

func test() {    print("test")    _ = TodoItem(Title: "Item 1")    for i in 2...4 {        _ = TodoItem(Title: "Item \(i)")    }    _ = TodoItem(Title: "Item 5")    print("end test")}

06003

请注意,第2,第3和第4项已取消初始化,因为它们在每个循环中超出范围.当test()完成时,第1项和第5项在超出范围时被取消初始化.

在应用程序内

正如德米特里·普洛特尼科夫在his answer年指出的那样,上述情况仅适用于斯威夫特游乐场.在应用程序中,结果是:

06004

这告诉我们:

>创建对象.>他们立即被释放.

总结

以上是内存溢出为你收集整理的在Swift中为Underscore分配变量全部内容,希望文章能够帮你解决在Swift中为Underscore分配变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1016100.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存