簡體   English   中英

與“必需”相反的Swift或超類中具有所需init方法的工廠設計模式

[英]Swift opposite to “required”, or factory design pattern with required init methods in superclass

一作序法required使得它使所有子類必須實現此方法。 有沒有辦法做相反的事情:防止超類中的方法在子類的對象上被調用? forbidden

當我寫這篇文章時,我開始意識到這實際上可能不是一個好主意……因為子類的概念性想法是它包含了超類中的所有數據,然后包含了所有數據。 從理論上講,如果我需要限制對超類方法的訪問,那意味着我可能做錯了。

我想做的是為UIButton的子類編寫一個init方法。 我希望此自定義init方法是創建子類對象的唯一方法。 但是UIButton(超類)的init方法是公共的並且是必需的,所以我不能只給它們加一個private變量並為自己編寫一個工廠...但是我不希望使用此類的開發人員在嘗試所有init函數之前一直嘗試這些方法找到一個不會崩潰的。 我想清楚地說這是使用的方法。

那么... Swift中是否有功能可以明確阻止訪問超類方法? 無論哪種方式,在沒有子類限制對超類功能的訪問的情況下,實現此類內容的“正確”方法是什么?

除非您需要自己調用該方法,否則可以使用@available(*, unavailable, message="Use XYZ instead") Swift將阻止任何人使用該方法。 如果將對象強制轉換為仍可使用該方法的超類,則仍可以使用它。

像本例中的sizeThatFits(_:)一樣: https : //github.com/fluidsonic/JetPack/blob/master/Sources/ui/View.swift#L341

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM