Swift - Typealias 在 Swift 中的用法

英語原文地址:Typealias usage in Swift - SwiftLee


Swift 中的typealias實際上是現有類型的別名。很簡單,不是嗎?它們可以使您的代碼更具可讀性。通過以一種聰明的方式使用它們,它們在您的代碼庫中會非常有用。


聲明類型別名

可以在 Swift 中使用typealias關鍵字和要分配的類型聲明typealias。理解如何使用它們的一個非常簡單的示例是爲貨幣(如美元)創建別名。以收據結構的以下示例爲例:

struct Receipt {
    let totalCosts: Double
}

由於類型只是“雙精度”,我們現在還沒有真正確定總成本。我們可以通過聲明類型別名來提高可讀性:

typealias Dollar = Double

這給了收據結構更多的上下文,並提高了可讀性:

struct Receipt {
    let totalCosts: Dollar
}

類型別名可以是創建自定義類或子類的簡單替代方法。


typealias是新類型嗎?

不,基本上,它只是現有類型的命名別名。我們的Dollar 別名只是一個Double 具有不同名稱的,因此可以與完全相同地使用Double

反之亦然。如果要爲類型別名創建擴展名,則基本上是爲其基礎類型創建擴展名。以下示例顯示toEuro() 了我們DollarDouble value 都可以使用的方法。

typealias Dollar = Double
typealias Euro = Double

struct Receipt {
    let totalCosts: Dollar
}

extension Dollar {
    func toEuro() -> Euro {
        return self * 0.896
    }
}

let receipt = Receipt(totalCosts: 10)
receipt.totalCosts.toEuro() // 8.96

let doubleNumber: Double = 10
doubleNumber.toEuro() // 8.96

與泛型結合

泛型也可以與類型別名結合使用。例如,我們可以使用新的Swift Result類型來創建交換結果類型。這可以進一步提高我們的可讀性:

typealias Dollar = Double
typealias Euro = Double

struct Receipt {
    let totalCosts: Dollar
}

typealias Currency = Double
typealias ExchangeResult<Currency> = Result<Currency, Error>

enum ExchangeError: Error {
    case invalidInput
}

extension Dollar {
    func toEuro() -> ExchangeResult<Euro> {
        guard self > 0 else {
            return ExchangeResult.failure(ExchangeError.invalidInput)
        }
        return Result.success(self * 0.896)
    }
}

let receipt = Receipt(totalCosts: 10)
receipt.totalCosts.toEuro() // .success(8.96)

let doubleNumber: Double = 10
doubleNumber.toEuro() // .success(8.96)

其他有價值的用法示例

在項目中經常使用typealias作爲輕鬆重用完成回調的一種方式:

typealias Completion = () -> Void

使委託符合多種類型:

typealias TransitionDelegate = UIViewController & UIViewControllerTransitioningDelegate

或者,爲在多個地方使用的字典制作一個簡單的別名:

/// A dictionary containing properties to send with the tracking operation
public typealias TrackingProperties = [String: Any]

結論

如您所見,類型別名對於提高整個代碼庫的可讀性很有用。看看它可以爲您的項目做什麼,並嘗試使您的代碼自我記錄。

謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章