Swift3命名空間的實現

2021-09-08 05:23:50 字數 902 閱讀 4360

最近在看一些swift開源庫的時候,發現了一些優秀的開源庫都使用了命名空間,例如kingfisher這個開源庫中,就針對uiimage,uiimageview,uibutton做了命名空間的擴充套件。通過logoimageview.kf.setimage(url)這種方式能夠很好地避免擴充套件的命名衝突,而且相對logoimageview.kf_setimage(url)這種通過字首避免命名衝突的方式,具有更好的可讀性,而且更swifty化。

主要通過三點來實現:

這是演示**:

// 定義泛型類

public final class ykkit } // 定義泛型協議 public protocol ykkitcompatible } // 協議的擴充套件 public extension ykkitcompatible } } // 實現命名空間yk extension string: ykkitcompatible {} // string命名空間yk中的函式 extension ykkit where base == string } // 使用 let string = "abcd".yk.localized

簡單解析一下實現**,主要用到了protocol和generic來實現,而且實現有點繞。

首先定義乙個泛型類ykkit,使用泛型base

然後定義支援泛型的協議ykkitcompatible,並通過協議擴充套件提供協議的預設實現,返回實現泛型類ykkit的物件自身。

然後對需要實現命名空間的類提供ykkitcompatible協議擴充套件,並實現相關命名空間的物件方法(主要是擴充套件新的方法,如**中的localized方法)。

整個過程比較繞,主要還是通過協議來劃分命名空間,只有遵循協議的類才擁有該命名空間,這可能需要進一步理解。

Swift3建立陣列

陣列是由一組型別相同的元素構成的有序資料集合。陣列中的集合元素是有 序的,而且可以重複出現。在swift語言中,陣列的型別格式為 array或 elementtype 其中array中的elementtype表示陣列的型別,是泛型寫法。elementtype 是一種簡寫方式。兩者表示的功能是一樣的,...

Swift3 建立字典

字典是由兩部分內容構成的,乙個是鍵 key 乙個是值 value 字典是一種儲存多個型別相同的值的容器。每個值都和乙個唯一的鍵相對應,這個鍵在字典裡就是其對應值的唯一標識。鍵是不能有重複元素的,而值是可以重複的 鍵和值是成對出現的。跟陣列不同,字典裡的元素並沒有特定的順序。在 字典 中使用鍵來查詢其...

swift 命名空間

原文 myframework.swift 這個檔案存在於 myframework.framework 中 public class myclass class myclass 在使用時,如果出現可能衝突的時候,我們需要在型別名稱前面加上 module 的名字 也就是 target 的名字 mycla...