打破 Swift 結構體中的迴圈引用

2021-09-23 00:17:46 字數 1115 閱讀 4985

本文講的是打破 swift 結構體中的迴圈引用,

嘗試從乙個閉包中訪問結構體

瘋狂的迴圈

我們要怎樣破解這個迴圈?

複製行不通,共享引用怎麼樣?

一些觀點

說在最後

final

class

ondelete

deinit }

deletionlogger

}do }

deletionlogger deleted

嘗試從乙個閉包中訪問結構體

counter }

counter

}} counter

}} counter

}} counter

}} 瘋狂的迴圈

let c =

counter()

print("not deleted, yet"

) withextendedlifetime(c) {}}

, argno 1 // users: %2, %20, %22, %29

我們要怎樣破解這個迴圈?

counter()

c.od

=nil

joe groff 在推上說的那樣,swift 發展程序 se-0035 應該避免此問題的產生,通過限制最大inout捕獲(也就是counter.init方法使用的那種捕捉),直到@noescape閉包(這將防止ondelete的尾隨閉包**獲)。

counter

return c

}}do

counter

return

}}do

一些觀點

counter }

說在最後

原文發布時間為:2023年05月11日

Swift中類和結構體

1.類和結構體對比 swift 中類和結構體有很多共同點 與結構體相比,類還有如下的附加功能 2.類和結構體的定義語法 類和結構體有著類似的定義方式。我們通過關鍵字class和struct來分別表示類和結構體,並在一對大括號中定義它們的具體內容,如下 class videomode struct r...

Swift 結構體的使用

swift 結構體是構建 所用的一種通用且靈活的構造體。我們可以為結構體定義屬性 常量 變數 和新增方法,從而擴充套件結構體的功能。與 c 和 objective c 不同的是 結構體總是通過被複製的方式在 中傳遞,因此它的值是不可修改的。我們通過關鍵字 struct 來定義結構體 struct n...

10 4 Swift結構體中的mutating方法

結構體中的 mutating方法 值型別 結構體或者列舉 預設方法是不可以修改屬性的,也不可以修改 self本身 如果要修改需要做特殊處理,函式前加上 mutating。當然在類 class 裡面當然是可以修改屬性的。class myperson func show void varm0 myper...