2016-09-16 52 views
6

在c#中,當引入與現有代碼有很多名稱衝突的庫時,有一種方法可以將導入別名,因此不需要爲每次使用都完全說明名稱空間。例如:是否有可能導入別名?

using MyCompany.MyLibrary.Model as MMM 

那麼你可以做

MMM.MyObject 

,而不是

MyCompany.MyLibrary.Model.MyObject 

隨着最近更新迅速的3.0,我發現我的一些模型對象,現在與碰撞Foundation類型,並且我一直被迫在Foundation.classname的類名稱前添加前綴NS的前綴。如果我可以像上面給出的c#示例一樣鍵入別名,我的模型庫的導入會很棒。這是可能的迅速3.0?如果沒有,是否有另一種避免名稱衝突的策略,導致必須在每種類型前面寫入框架名稱?我正在考慮返回給我的類名添加前綴,就像我們在obj-c中所做的那樣,但是我在嘗試在我做這些事情之前嘗試探索我的選項。

回答

7

一般

可以導入特定的實體以及整個模塊:

import struct­ SomeModule.SomeStruct 
import class­ SomeModule.SomeClass 
import func SomeModule.someFunc 

請參閱「導入的」實體類型in the import-kind rule of Swift grammar的完整列表。

然後你就可以創建一個typealias

typealias SMSomeStruct = SomeModule.SomeStruct 

而且,隨着斯威夫特3,沒有import聲明與聯合走樣。

考慮到碰撞與Foundation實體

說,你有一個類SomeModule.NumberFormatter

這足以創造一個單獨的斯威夫特文件中的兩個typealias ES(在進口項目),以防止碰撞:

import Foundation 
import SomeModule 

typealias NumberFormatter = Foundation.NumberFormatter 
typealias SMNumberFormatter = SomeModule.NumberFormatter 
+0

作爲雨燕3的?我相信這個功能從一開始就在Swift中。 – Sulthan

+1

我想你是對的。編寫「從Swift 3開始」的主要原因是我無法確定它在Swift 4+中是否成立。我刪除了第一個「從Swift 3開始」,因爲Apple幾乎不可能從該語言中刪除該功能。 –

+0

非常感謝您的回答! –

相關問題