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可以放心大膽的省略了🥰





留言
avatar-img
留言分享你的想法!
avatar-img
Michelle Chen的沙龍
8會員
34內容數
紀錄iOS開發上遇到的問題或是一些流程筆記。主要都是Swift。
Michelle Chen的沙龍的其他內容
2024/09/06
本文介紹了使用KeyboardLayoutGuide的方法,以及在不同iOS版本和設備上遇到的佈局問題。透過調整TextView的底部對齊方式,成功解決了在模擬器和真實設備上出現的錯誤,提供了有用的建議給開發者。本文還探討了為何在iOS15與Xib的組合使用中會出現問題,以及解決方案。
Thumbnail
2024/09/06
本文介紹了使用KeyboardLayoutGuide的方法,以及在不同iOS版本和設備上遇到的佈局問題。透過調整TextView的底部對齊方式,成功解決了在模擬器和真實設備上出現的錯誤,提供了有用的建議給開發者。本文還探討了為何在iOS15與Xib的組合使用中會出現問題,以及解決方案。
Thumbnail
2024/08/07
使用者回報的超級奇怪線上問題,用數字鍵盤(NumberPad)更改欄位時,送出後尾數都會消失。例如:30 ⭢ 3,52 ⭢ 5。 尋尋覓覓了兩天終於被我找到這篇,apple的奇葩的bug 重現條件 iOS17 手機設定是繁體中文語系 前一個用過的鍵盤是Cangjie倉頡 or Suchen
2024/08/07
使用者回報的超級奇怪線上問題,用數字鍵盤(NumberPad)更改欄位時,送出後尾數都會消失。例如:30 ⭢ 3,52 ⭢ 5。 尋尋覓覓了兩天終於被我找到這篇,apple的奇葩的bug 重現條件 iOS17 手機設定是繁體中文語系 前一個用過的鍵盤是Cangjie倉頡 or Suchen
2024/07/03
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
2024/07/03
這篇文章探討瞭如何在iOS應用程式中客製化Alert,包括改變字體大小、內嵌連結以及讓Alert的高度隨著字數增長並提供scroll操作。同時使用SwiftUI進行客製化,並介紹瞭解決高度超出範圍後文字捲動與scrollView固定高度的方法。
Thumbnail
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
《練習2》生平大小事清單 這章談到放棄其實有資源的, 老師一路放棄很多事, 看似放棄, 其實另開闢一條路。 薩提爾女士說:「當我們試圖隱藏自認為不好的部分,就減低了成長的可能。」 我在書寫這份清單時, 我覺得根本快變成自傳啦! 因為我分不同階段來寫, 老師說不用按照
Thumbnail
《練習2》生平大小事清單 這章談到放棄其實有資源的, 老師一路放棄很多事, 看似放棄, 其實另開闢一條路。 薩提爾女士說:「當我們試圖隱藏自認為不好的部分,就減低了成長的可能。」 我在書寫這份清單時, 我覺得根本快變成自傳啦! 因為我分不同階段來寫, 老師說不用按照
Thumbnail
Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!! 用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test" 編譯正常!變數a成功被改成
Thumbnail
Xcode15的 @escaping closure裡解包後的[weak self]不必再寫 self了!! 用一個範例class Test來實驗,裡面只有一個變數a跟一個testClosure回"test",再用callTestClosure把變數a改成"test" 編譯正常!變數a成功被改成
Thumbnail
swift讀書筆記 Documentation Edit descriptiondocs.swift.org objective-c 的init 會return value,swift 不會。 所有的property都必須在Init()裡面設定初始值,或設定stored property,這種
Thumbnail
swift讀書筆記 Documentation Edit descriptiondocs.swift.org objective-c 的init 會return value,swift 不會。 所有的property都必須在Init()裡面設定初始值,或設定stored property,這種
Thumbnail
Immutable interface 讓封裝更有彈性,不用擔心 setter 的過度開放。當不希望物件被不允許的對象修改時,只需讓對方取得 getter 的介面即可,反之,讓能夠允許修改的對象取得有 setter 的物件即可。
Thumbnail
Immutable interface 讓封裝更有彈性,不用擔心 setter 的過度開放。當不希望物件被不允許的對象修改時,只需讓對方取得 getter 的介面即可,反之,讓能夠允許修改的對象取得有 setter 的物件即可。
Thumbnail
再次回想起那段記憶,你知道你已足夠強壯去度過它 為什麼有時候在描述自己經歷的事件時,我們不用「我」,而是用「你」來描述?這個「你」指的是誰? 記得小時候寫作文,老師總說不要使用「你」,會造成語氣太過強烈,好像在質疑、針對讀者。 是,也不是。要看是在什麼語境下使用。 「你」的指涉對象其實有很多,可以簡
Thumbnail
再次回想起那段記憶,你知道你已足夠強壯去度過它 為什麼有時候在描述自己經歷的事件時,我們不用「我」,而是用「你」來描述?這個「你」指的是誰? 記得小時候寫作文,老師總說不要使用「你」,會造成語氣太過強烈,好像在質疑、針對讀者。 是,也不是。要看是在什麼語境下使用。 「你」的指涉對象其實有很多,可以簡
Thumbnail
自我修正,與推翻自我 面臨到的最大挑戰 在我身上的體驗 往往,是源自於「自我定義」本身 就是說,將“我”這個東西 以「怎樣的形式」“如何”去 附著在什麼事物上 就是說,用什麼東西來定義自我 「我」是什麼東西 慢 直接用我慢去看待自我問題 直接用禪宗 「我執」“我慢”的角度,去切入問題 是最接近核心的
Thumbnail
自我修正,與推翻自我 面臨到的最大挑戰 在我身上的體驗 往往,是源自於「自我定義」本身 就是說,將“我”這個東西 以「怎樣的形式」“如何”去 附著在什麼事物上 就是說,用什麼東西來定義自我 「我」是什麼東西 慢 直接用我慢去看待自我問題 直接用禪宗 「我執」“我慢”的角度,去切入問題 是最接近核心的
Thumbnail
「允許自己逃避、允許自己沒有喜歡所有的事情、允許自己求救、允許自己悲傷、允許自己做自己。」 // 長大的路上我一直在練習,練習明白「沒有一個人有辦法滿足所有人的期待,但至少我們可以接納自己的真實、弄明白對自我的期待」。
Thumbnail
「允許自己逃避、允許自己沒有喜歡所有的事情、允許自己求救、允許自己悲傷、允許自己做自己。」 // 長大的路上我一直在練習,練習明白「沒有一個人有辦法滿足所有人的期待,但至少我們可以接納自己的真實、弄明白對自我的期待」。
Thumbnail
在類別一節中,我們可以用Student類別的實體來存取類別中的name變數、score字典、以及其中的所有方法,這些可以被類別以外的程式碼所直接存取的屬性稱為公有屬性(public attribute)、可以被類別以外的程式碼所直接呼叫的方法稱為公有方法(public method)。
Thumbnail
在類別一節中,我們可以用Student類別的實體來存取類別中的name變數、score字典、以及其中的所有方法,這些可以被類別以外的程式碼所直接存取的屬性稱為公有屬性(public attribute)、可以被類別以外的程式碼所直接呼叫的方法稱為公有方法(public method)。
Thumbnail
好難下標的一篇文章,這一篇文章所要講的概念,可以幫助大家在日常生活中能夠更容易做到「自我覺察」這件事情。我覺得不論是要解決問題、煩惱還是面對課題,要去完成的前提都是先要有「自我覺察」。 我一直以來都以為自己很會自我覺察,近年來才發現我其實並不是一個特別會自我覺察的人,只是一個比較承受不住挫折的人。
Thumbnail
好難下標的一篇文章,這一篇文章所要講的概念,可以幫助大家在日常生活中能夠更容易做到「自我覺察」這件事情。我覺得不論是要解決問題、煩惱還是面對課題,要去完成的前提都是先要有「自我覺察」。 我一直以來都以為自己很會自我覺察,近年來才發現我其實並不是一個特別會自我覺察的人,只是一個比較承受不住挫折的人。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News