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

更新於 2024/10/16閱讀時間約 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可以放心大膽的省略了🥰





avatar-img
7會員
35內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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,這種
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
我們經常因過度在意他人眼光而陷入焦慮,甚至給自己設下過高的目標,導致壓力過大無法實現理想。透過視角轉換與感知力的提升,我們可以學會在混亂中找到機會,並重新定義成功與失敗的意義。當我們不再被外界的期望所左右,並且能夠真實面對自己的內在需求時,真正的自信將隨之而來,讓我們更從容地應對生活中的挑戰。
Thumbnail
在人生的旅程中,我們常常與他人有過交集,卻忽略了每個人都是獨一無二的個體。與其將時間花在無謂的比較上,讓自己陷入焦慮,不如專注於提升自我,並找到內心的平靜與滿足。
Thumbnail
這篇文章探討了我們如何在壓力重重的現代生活中,透過行為調整、內在控制感及建立深層次人際關係,來重新掌控生活,提升生活質量。從多巴胺系統到科技戒斷,我們可以找到有效的策略來增進專注力、減少焦慮,最終實現自我提升與內心平衡。
Thumbnail
瞭解如何在Xcode15及以上使用Logger進行更好的程式debug。Logger可以更好的組織Log,但也有一些缺點需要注意。本文將介紹Logger的基本使用方式,以及一些注意事項。
Thumbnail
Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!! 用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test" 編譯正常!變數a成功被改成
Thumbnail
最初,聽著阿翰的就醫過程,他跑過不少的醫療院所,看過不少的醫師,膝蓋仍然覺得疼痛,這樣的過程已經兩年了。他說著他很喜歡跑步,可是每一次的跑步都讓他的膝蓋很難受,現在別說跑了,連坐著的時候,膝蓋都隱隱作痛。 那一天開始治療前,看他的眼神閃亮,喜悅地告訴我說他開始跑步了,他拿出手機開啟app紀錄跑步的程
Thumbnail
現在願意投入服務業的年輕人,不想當低薪免洗員工的話,我認為除了發展業內斜槓、抓緊機會外,更重要的是把投資自己學習放在第一要務。務必要把時間留給自己,別讓雜事填滿自己生活。人最重要的資產是時間;比時間更重要的是注意力! 即使下班己經比狗還累,還是要以不斷學習、不斷體驗為目標,去取得能創造產值的技能。
Thumbnail
不曉得你是否有過以下的感覺: l 你一直都是非常努力的人,辦公室的同仁都紛紛下班了,只有你願意把事情做到最好,然而持續了幾年,日復一日,公司的升遷制度又緩慢,讓你不經懷疑是不是應該換工作,好像所有付出都沒有得到回報,生命中少了那份可以向前的動力。
Thumbnail
情緒會不自覺的影響投資人的決策,投資人要想辦法抵抗自身不自覺出現的情緒,理性解讀市場的情緒,正常的新手投資人應該都做不到,即使是有一定經驗的投資人,還是可能栽在自己無法掌控的情緒因素。
Thumbnail
對我來說,重要的不是排名與獎牌,我更在乎的是自己有沒有比在世界花式溜冰錦標賽獲勝時更進步。如果我的表現與演出當時一樣,那就是「不理想的結果」。每一次挑戰的標準都要高於自己曾經達到的目標。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
我們經常因過度在意他人眼光而陷入焦慮,甚至給自己設下過高的目標,導致壓力過大無法實現理想。透過視角轉換與感知力的提升,我們可以學會在混亂中找到機會,並重新定義成功與失敗的意義。當我們不再被外界的期望所左右,並且能夠真實面對自己的內在需求時,真正的自信將隨之而來,讓我們更從容地應對生活中的挑戰。
Thumbnail
在人生的旅程中,我們常常與他人有過交集,卻忽略了每個人都是獨一無二的個體。與其將時間花在無謂的比較上,讓自己陷入焦慮,不如專注於提升自我,並找到內心的平靜與滿足。
Thumbnail
這篇文章探討了我們如何在壓力重重的現代生活中,透過行為調整、內在控制感及建立深層次人際關係,來重新掌控生活,提升生活質量。從多巴胺系統到科技戒斷,我們可以找到有效的策略來增進專注力、減少焦慮,最終實現自我提升與內心平衡。
Thumbnail
瞭解如何在Xcode15及以上使用Logger進行更好的程式debug。Logger可以更好的組織Log,但也有一些缺點需要注意。本文將介紹Logger的基本使用方式,以及一些注意事項。
Thumbnail
Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!! 用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test" 編譯正常!變數a成功被改成
Thumbnail
最初,聽著阿翰的就醫過程,他跑過不少的醫療院所,看過不少的醫師,膝蓋仍然覺得疼痛,這樣的過程已經兩年了。他說著他很喜歡跑步,可是每一次的跑步都讓他的膝蓋很難受,現在別說跑了,連坐著的時候,膝蓋都隱隱作痛。 那一天開始治療前,看他的眼神閃亮,喜悅地告訴我說他開始跑步了,他拿出手機開啟app紀錄跑步的程
Thumbnail
現在願意投入服務業的年輕人,不想當低薪免洗員工的話,我認為除了發展業內斜槓、抓緊機會外,更重要的是把投資自己學習放在第一要務。務必要把時間留給自己,別讓雜事填滿自己生活。人最重要的資產是時間;比時間更重要的是注意力! 即使下班己經比狗還累,還是要以不斷學習、不斷體驗為目標,去取得能創造產值的技能。
Thumbnail
不曉得你是否有過以下的感覺: l 你一直都是非常努力的人,辦公室的同仁都紛紛下班了,只有你願意把事情做到最好,然而持續了幾年,日復一日,公司的升遷制度又緩慢,讓你不經懷疑是不是應該換工作,好像所有付出都沒有得到回報,生命中少了那份可以向前的動力。
Thumbnail
情緒會不自覺的影響投資人的決策,投資人要想辦法抵抗自身不自覺出現的情緒,理性解讀市場的情緒,正常的新手投資人應該都做不到,即使是有一定經驗的投資人,還是可能栽在自己無法掌控的情緒因素。
Thumbnail
對我來說,重要的不是排名與獎牌,我更在乎的是自己有沒有比在世界花式溜冰錦標賽獲勝時更進步。如果我的表現與演出當時一樣,那就是「不理想的結果」。每一次挑戰的標準都要高於自己曾經達到的目標。