【问题标题】:Making a typealias with a protocol使用协议制作类型别名
【发布时间】:2017-10-03 05:31:12
【问题描述】:

我可以这样定义 2 个类型别名吗?

typealias MyViewControllerTypeOne = UIViewController

typealias MyViewControllerTypeTwo = UIViewController, MyGreatProtocol

我已经知道第二个不适用于这种语法。

但是获得我想要的结果的方法是什么? (我想我想要的在这里很明显。)

【问题讨论】:

    标签: ios swift3 protocols type-alias


    【解决方案1】:

    Swift 4 中,您现在可以使用& 运算符来组合具有任意数量协议的类:

    typealias MyViewControllerTypeTwo = UIViewController & MyGreatProtocol
    

    在 05:23 左右查看WWDC 2017 "What's New in Swift"

    您还可以在Swift 4.0 documentation 中查看“协议组合”部分,尽管它没有提到使用协议组合类。

    【讨论】:

    • 我明白了。我在 Swift 3 中试过这个。它没有用。至少这对 Swift 4 来说是个好消息。
    【解决方案2】:

    你可以把它作为一个元组来做 -

    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类型的对象呢?如果尝试像 on 一样使用它会使用 UIViewController 它不起作用。
    • @Michel 我已经编辑了答案,这取决于你如何使用它。
    猜你喜欢
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多