Xcode15 擺脫closure裡[weak self]解包後的self

閱讀時間約 2 分鐘

Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!!(好繞口)

用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test"

Xcode15的編譯

Xcode15的編譯

編譯正常!變數a成功被改成test

Xcode15的結果

Xcode15的結果

Xcode14的場合

同一份code拿到14去編譯,發生錯誤

Reference to property 'a' in closure requires explicit use of 'self' to make capture semantics explicit

在closure裡用到self的東西,一定要標self.XXX

Xcode14的編譯

Xcode14的編譯

為何會有這樣的差別?

Xcode14/15差在哪?而且一般來說,我們在closure裡寫[weak self],再用self?.a或解包後的self.a是為了避免循環引用。如果Xcode15不必特別寫明self,那他會指向誰?是closure的[weak self]還是外面class的self?🤔

為此特別去搜尋了官方的文件,解答在此!Swift 5.8官方新增了一個改動

Allow implicit self for weak self captures, after self is unwrapped

Proposed solution

We should permit implicit self for weak self captures, once self has been unwrapped.

This code would now be allowed to compile:

class ViewController {
let button: Button

func setup() {
button.tapHandler = { [weak self] in
guard let self else { return }
dismiss()
}
}

func dismiss() { ... }
}


要Swift5.8以後才能用(Xcode14↔Swift5.7、Xcode15↔Swift5.9)
解包後的self指的是weak self,以後使用Xcode15解包後的self可以放心大膽的省略了🥰





6會員
35Content count
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言0
查看全部
發表第一個留言支持創作者!
Michelle Chen的沙龍 的其他內容
一樣先來看官方文件 A view controller that provides access to documents or destinations outside your app’s sandbox. 其實就是讓你去讀取檔案App的東西 有兩種模式,Don’t copy the do
iCloud+的服務 只有付錢的人才能用,免費仔如我從來沒聽過😗 簡介 通常你在瀏覽網頁時,網路供應商和你所造訪的網站可以看到網頁流量所包含的資訊(例如 DNS 記錄和 IP 位址)。此資訊可用來判斷你的身分,並建立描述檔來記錄你的位置以及往後的瀏覽記錄。 「iCloud 私密轉送」的設計旨
漸層文字 做出像Apple Keynote主題一樣的美美漸層文字 先畫出一大塊美美漸層色,可以選自己喜歡的顏色跟角度去做喔 LinearGradient(colors: [.blue, .purple, .red], startPoint: .bottomLead
先來看官方文件 https://developer.apple.com/documentation/swiftui/spacer Spacer A flexible space that expands along the major axis of its containing stack
swift讀書筆記 https://docs.swift.org/swift-book/documentation/the-swift-programming-language/deinitialization/  class instance deallocated前會call deinitia
swift讀書筆記 Documentation Edit descriptiondocs.swift.org objective-c 的init 會return value,swift 不會。 所有的property都必須在Init()裡面設定初始值,或設定stored property,這種
一樣先來看官方文件 A view controller that provides access to documents or destinations outside your app’s sandbox. 其實就是讓你去讀取檔案App的東西 有兩種模式,Don’t copy the do
iCloud+的服務 只有付錢的人才能用,免費仔如我從來沒聽過😗 簡介 通常你在瀏覽網頁時,網路供應商和你所造訪的網站可以看到網頁流量所包含的資訊(例如 DNS 記錄和 IP 位址)。此資訊可用來判斷你的身分,並建立描述檔來記錄你的位置以及往後的瀏覽記錄。 「iCloud 私密轉送」的設計旨
漸層文字 做出像Apple Keynote主題一樣的美美漸層文字 先畫出一大塊美美漸層色,可以選自己喜歡的顏色跟角度去做喔 LinearGradient(colors: [.blue, .purple, .red], startPoint: .bottomLead
先來看官方文件 https://developer.apple.com/documentation/swiftui/spacer Spacer A flexible space that expands along the major axis of its containing stack
swift讀書筆記 https://docs.swift.org/swift-book/documentation/the-swift-programming-language/deinitialization/  class instance deallocated前會call deinitia
swift讀書筆記 Documentation Edit descriptiondocs.swift.org objective-c 的init 會return value,swift 不會。 所有的property都必須在Init()裡面設定初始值,或設定stored property,這種
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
最初,聽著阿翰的就醫過程,他跑過不少的醫療院所,看過不少的醫師,膝蓋仍然覺得疼痛,這樣的過程已經兩年了。他說著他很喜歡跑步,可是每一次的跑步都讓他的膝蓋很難受,現在別說跑了,連坐著的時候,膝蓋都隱隱作痛。 那一天開始治療前,看他的眼神閃亮,喜悅地告訴我說他開始跑步了,他拿出手機開啟app紀錄跑步的程
Thumbnail
現在願意投入服務業的年輕人,不想當低薪免洗員工的話,我認為除了發展業內斜槓、抓緊機會外,更重要的是把投資自己學習放在第一要務。務必要把時間留給自己,別讓雜事填滿自己生活。人最重要的資產是時間;比時間更重要的是注意力! 即使下班己經比狗還累,還是要以不斷學習、不斷體驗為目標,去取得能創造產值的技能。
Thumbnail
不曉得你是否有過以下的感覺: l 你一直都是非常努力的人,辦公室的同仁都紛紛下班了,只有你願意把事情做到最好,然而持續了幾年,日復一日,公司的升遷制度又緩慢,讓你不經懷疑是不是應該換工作,好像所有付出都沒有得到回報,生命中少了那份可以向前的動力。
Thumbnail
情緒會不自覺的影響投資人的決策,投資人要想辦法抵抗自身不自覺出現的情緒,理性解讀市場的情緒,正常的新手投資人應該都做不到,即使是有一定經驗的投資人,還是可能栽在自己無法掌控的情緒因素。
Thumbnail
對我來說,重要的不是排名與獎牌,我更在乎的是自己有沒有比在世界花式溜冰錦標賽獲勝時更進步。如果我的表現與演出當時一樣,那就是「不理想的結果」。每一次挑戰的標準都要高於自己曾經達到的目標。
Thumbnail
「自我原則」是無意識中驅使自己行動的指令,例如:「我應該考100分」,「我必須完成所有工作」。通常大腦有制定自我原則地傾向。
Thumbnail
「世界唯一的花」。 沒錯我們都是世界上獨一無二的花朵,每個人都品種各不相同 只要努力綻放出屬於自己的花朵就夠了 因為無論是小花或大花,每一朵都不一樣 不是NO.1也無妨,我們都是特別的only one.
Thumbnail
當社群與搜尋系統,都崩壞到難以支持媒體舊模式的運作時,媒體須思考:以內容找回讀者信賴、建立和讀者的直接連結,以及新獲利模式與組織架構。
Thumbnail
Xcode 10 使用了新的 build system,導致有使用 Crashlytics 框架的專案,其整合方式需要作些微調整。在說明之前,先看看以下引用自 Fabric 官方文件的片段:
Thumbnail
世界衛生組織曾表示,現代人類的三大文明病是愛滋病,癌症與憂鬱症,每一年全世界因為憂鬱症而自殺的超過一百萬人,有三億五千萬人正為憂鬱症所苦。 台灣的數據也非常嚇人,衛生福利部統計,單單在2014年看診
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
最初,聽著阿翰的就醫過程,他跑過不少的醫療院所,看過不少的醫師,膝蓋仍然覺得疼痛,這樣的過程已經兩年了。他說著他很喜歡跑步,可是每一次的跑步都讓他的膝蓋很難受,現在別說跑了,連坐著的時候,膝蓋都隱隱作痛。 那一天開始治療前,看他的眼神閃亮,喜悅地告訴我說他開始跑步了,他拿出手機開啟app紀錄跑步的程
Thumbnail
現在願意投入服務業的年輕人,不想當低薪免洗員工的話,我認為除了發展業內斜槓、抓緊機會外,更重要的是把投資自己學習放在第一要務。務必要把時間留給自己,別讓雜事填滿自己生活。人最重要的資產是時間;比時間更重要的是注意力! 即使下班己經比狗還累,還是要以不斷學習、不斷體驗為目標,去取得能創造產值的技能。
Thumbnail
不曉得你是否有過以下的感覺: l 你一直都是非常努力的人,辦公室的同仁都紛紛下班了,只有你願意把事情做到最好,然而持續了幾年,日復一日,公司的升遷制度又緩慢,讓你不經懷疑是不是應該換工作,好像所有付出都沒有得到回報,生命中少了那份可以向前的動力。
Thumbnail
情緒會不自覺的影響投資人的決策,投資人要想辦法抵抗自身不自覺出現的情緒,理性解讀市場的情緒,正常的新手投資人應該都做不到,即使是有一定經驗的投資人,還是可能栽在自己無法掌控的情緒因素。
Thumbnail
對我來說,重要的不是排名與獎牌,我更在乎的是自己有沒有比在世界花式溜冰錦標賽獲勝時更進步。如果我的表現與演出當時一樣,那就是「不理想的結果」。每一次挑戰的標準都要高於自己曾經達到的目標。
Thumbnail
「自我原則」是無意識中驅使自己行動的指令,例如:「我應該考100分」,「我必須完成所有工作」。通常大腦有制定自我原則地傾向。
Thumbnail
「世界唯一的花」。 沒錯我們都是世界上獨一無二的花朵,每個人都品種各不相同 只要努力綻放出屬於自己的花朵就夠了 因為無論是小花或大花,每一朵都不一樣 不是NO.1也無妨,我們都是特別的only one.
Thumbnail
當社群與搜尋系統,都崩壞到難以支持媒體舊模式的運作時,媒體須思考:以內容找回讀者信賴、建立和讀者的直接連結,以及新獲利模式與組織架構。
Thumbnail
Xcode 10 使用了新的 build system,導致有使用 Crashlytics 框架的專案,其整合方式需要作些微調整。在說明之前,先看看以下引用自 Fabric 官方文件的片段:
Thumbnail
世界衛生組織曾表示,現代人類的三大文明病是愛滋病,癌症與憂鬱症,每一年全世界因為憂鬱症而自殺的超過一百萬人,有三億五千萬人正為憂鬱症所苦。 台灣的數據也非常嚇人,衛生福利部統計,單單在2014年看診