提问人:sudocu 提问时间:4/6/2023 最后编辑:sudocu 更新时间:4/8/2023 访问量:89
Swift:创建类型别名后禁止使用原始类名
Swift: Forbid use of original class name after creating a typealias
问:
在创建类型别名后,是否可以在 Swift 中禁止在我的程序中使用原始类名?
你好
为了避免在我的程序中类名的使用不一致,我想在我的程序中强制系统地使用别名而不是原始类名。有可能这样做吗?
我正在使用一个外部库,其中有一个类并不完全是它应该做的事情:库中该类的名称对我来说似乎不正确。我该如何处理?
例如。一个具有函数而不是 的类,我想重命名它,然后在我的程序中以独占方式调用。Dog
meows
barks
Cat
Cat
答:
像这样应用一致的样式是 linter 的工作,而不是编译器的工作。对于 swiftlint,您可以按照这些思路编写规则。(这是未经测试的,但基于文档中的示例。pirates_beat_ninjas
custom_rules:
cats_not_dogs:
included:
- ".*\\.swift"
name: "Use Cat rather than Dog"
regex: "Dog"
match_kinds:
- identifier
message: "Use Cat rather than Dog."
severity: error
我正在使用一个外部库,其中有一个类并不完全是它应该做的事情:库中该类的名称对我来说似乎不正确。我该如何处理?
一种选择是创建你自己的库,包装有问题的库,只公开你的名字。
由于您的问题被标记为 swift,因此我假设我们实际上在这里谈论的是 Swift 包。假设您正在使用的包称为 ,并且它包含一个类 ,您更愿意将其称为 。您可以创建一个新包,例如,它包含如下文件:Canine
Dog
Cat
Feline
Feline.swift
import Canine
public typealias Cat = Dog
现在,您可以将包添加到您的应用,以及任何需要它的源文件。该包将作为依赖项添加到应用中,但只要您不添加到源文件,编译器就会阻止您直接使用。Feline
import Feline
Canine
import Canine
Dog
这似乎很麻烦,只是因为你不喜欢一个类的名字。即便如此,我还是可以想象出一些值得付出努力的原因,例如:
其中许多名字都选得不好;
Canine
您的公司最近被收购,并且您想要重命名库中的类型以包含新名称或隐藏旧名称;
您有多个不同的库来构建应用,而无需更改源代码中的名称。(在这种情况下,协议可能是更好的选择。
评论
Cat
Dog
Dog
Cat
Dog