我正在學習 swift 編程語言,最近遇到了擴展的概念,您可以在其中擴展現有類或結構的功能。例如(來源):
extension String {
func trimmed() -> String {
self.trimmingCharacters(in: .whitespacesAndNewlines)
}
}
我的問題是,除了我撰寫此檔案的檔案之外,此修改還會影響哪些其他代碼?
例如,如果我String在一個檔案中宣告了一個擴展名,它會影響String我匯入的庫中的行為嗎?或者如果我在一個檔案中宣告此擴展名,它是否會在同一專案的其他檔案中可見?
相關地,我不明白 Swift 如何解決擴展之間的沖突。例如,我匯入了兩個都擴展的庫String。哪一項生效?
我曾嘗試在谷歌上搜索“快速擴展范圍”和“快速沖突擴展”等術語,但沒有找到任何能完全描述其作業原理的內容。
我還注意到 Swift 不允許我在單個檔案中重新宣告擴展名,但這并不能回答我關于匯入的擴展名如何相互影響的問題。
uj5u.com熱心網友回復:
擴展的范圍遵循與在 swift 中創建結構、類和其他型別和變數時相同的規則。
默認情況下,擴展名是internal創建它的模塊,因此該模塊中的所有檔案都可以訪問。
您可以將其更改為public或private如果您愿意。
如果相同的兩個擴展彼此可見并添加了具有相同簽名的函式,則會發生您參考的沖突。
因此,如果您想trimmed()在多個檔案中創建擴展并在每個檔案中為其提供不同的實作,您需要將它們全部設為私有以避免任何沖突。
雖然……這可能不是一個好主意,因為它可能會與您專案中的其中一些內容混淆。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/411913.html
標籤:
上一篇:同步佇列中的嵌套同步佇列未運行
