使用协议创建一个 typealias

3

我可以这样定义两个typealias吗?

typealias MyViewControllerTypeOne = UIViewController

typealias MyViewControllerTypeTwo = UIViewController, MyGreatProtocol

我已经知道第二个语法不起作用。

但是如何获得我想要的结果呢?(我认为我在这里想要的很明显。)

2个回答

4
在 Swift 4 中,你可以使用 & 运算符将任意数量的协议组合成一个类:
typealias MyViewControllerTypeTwo = UIViewController & MyGreatProtocol

请参考在05:23左右的视频:WWDC 2017 "Swift有什么新特性"
您还可以查看Swift 4.0文档中的“协议组合”部分,尽管它没有提到如何将类与协议组合。

我明白了。我曾经在Swift 3中尝试过这个,但它没有起作用。至少对于Swift 4来说,这是一个好消息。 - Michel

0

你可以将它作为元组实现 -

typealias tupleAlias = (viewController :UIViewController,protocol: MyGreatProtocol)

编辑: 使用示例-

typealias PersonTuple = (name: String, address: String)

    override func viewDidLoad() {
        super.viewDidLoad()
        let tupleInstance = getPerson(for: "Jack")
        print(tupleInstance.address)//Prints India
    }
    func getPerson(for name: String) -> PersonTuple {
        return (name, "India")
    }

这个typealias定义看起来没问题,但是之后如何使用它来定义一个tupleAlias的对象呢?如果像使用UIViewController那样尝试使用它,就会失败。 - Michel
@Michel,我已经编辑了答案,这取决于你如何使用它。 - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接