当前位置: 首页 > 工具软件 > Dollar.swift > 使用案例 >

Swift - Typealias 在 Swift 中的用法

夹谷英杰
2023-12-01

英语原文地址: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]

结论

如您所见,类型别名对于提高整个代码库的可读性很有用。看看它可以为您的项目做什么,并尝试使您的代码自我记录。

谢谢!

 类似资料: