2017-07-16 86 views
1

我是iOS開發新手,已閱讀關於擴展的文章。但是我找不到任何關於擴展和繼承的例子。如何覆蓋並繼承Swift中的擴展?

SpreadsheetView爲例。我想覆蓋extension SpreadsheetView

我發現我能在我自己的.swift文件創建另一部分覆蓋它:

extension SpreadsheetView { 
    public func scrollViewDidScroll(_ scrollView: UIScrollView) { 
    // custom code 
    } 
} 

不過,我想保持默認的實現也。我如何從我的自定義函數調用它? super.scrollViewDidScroll(self as SpreadsheetView).scrollViewDidScroll不起作用。

當我回到基本並複製所有代碼。它不允許。所以,這不是一個選項,對我說:

「rowHeaderView」不可訪問由於「內部」保護級別

回答

1

您不能覆蓋任何延期執行。擴展用於爲現有類,結構,枚舉或協議類型添加新功能。

如果你想覆蓋任何函數,你應該覆蓋該類,然後重寫該方法。像這樣的東西。

class MySpreadsheetView: SpreadsheetView { 
    override func scrollViewDidScroll(_ scrollView: UIScrollView) { 
     super.scrollViewDidScroll(scrollView) 
     //.... 
    } 
} 
+0

我以前試過,並且出現錯誤'無法從其定義模塊外部的非開放類'SpreadsheetView'繼承。這是否意味着我無法繼承這個庫?並且必須直接修改lib? – Qooe

+0

在Swift類中必須是'open',如果你不想在模塊之外重寫。 'SpreadsheetView'必須是公有或私有的,這樣你才能在模塊之外覆蓋它。 – Bilal

+0

謝謝。這是否意味着修改模塊源是唯一的方法?或任何其他優雅通常處理這個原因? (所以如果它是封閉的源代碼,你不能直接改變它) – Qooe