美文网首页IOS开发程序员
Swift:协议中关联类型参数可读

Swift:协议中关联类型参数可读

作者: sing_crystal | 来源:发表于2016-04-12 12:54 被阅读402次

原文链接
原文日期:2016-04-09
译者:Crystal Sun

我慢慢习惯了 Swift 里的 Associated Type,尽管它们已经出现好一阵子了,我最初是从这篇文章 @alexisgallagher里开始理解它们的。

我很开心昨天能在 iOS 开发中用它们解决一些问题:Swift 语言下使用 Storyboard 和 Segue 在 View Controller 里引入数据

昨天我更新了博客,一开始协议看起来像是这样:

protocol Injectable {
    
    associatedType T
    func inject(thing: T)
    func assertDependencies()
}

注意 thing!因为每个 View Controller 都会被注入一些特别具体的东西 —— 有可能是 text 类型的、数值类型的、数组类型的,或者其他什么类型!我不知道如何命名参数。所以 thing 看起来是最合适的参数名字了。

实现过程如下:

func inject(thing: T) {
    textDependency = thing
}

我实在不喜欢 thing —— 不具有稳定性。所以今天早上,我想到了一个疯狂的解决方案,不用 thing 了,结果这方法竟然走得通!

protocol Injectable {
    associatedType T
    
    // 用 _ 替换掉 thing
    func inject(_: T)
    
}

替换掉 thing,我在协议里把参数名字改成 _!
很明显,现在实现此协议时,我可以把参数命名成任何名字了。


class MyStringDependencyViewController: UIViewController, Injectable {
    
    private var textDependency: String!
    
    // 在这个地方,thing 是 text
    func inject(text: String) {
        textDependency = text
    }
}

class MyIntDependencyViewController: UIViewController, Injectable {
    
    private var numberDependency: Int!
    
    // 在这个地方,thing 是 number
    func inject(number: Int) {
        numberDependency = number
    }
}


现在,实现过程非常清晰,随着使用关联类型的次数增多,我越来越喜欢它了。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权。

相关文章

  • Swift:协议中关联类型参数可读

    原文链接原文日期:2016-04-09译者:Crystal Sun 我慢慢习惯了 Swift 里的 Associa...

  • 2018-03-08

    Swift关键字 associatedtype: 协议-关联类型, 作用:为协议中的某个类型提供了一个占位名(或者...

  • Swift中协议的关联类型

    协议的关联类型指的是根据使用场景的变化,如果协议中某些属性存在“逻辑相同的而类型不同”的情况,可以使用关键字ass...

  • swift-- 泛型

    类型约束 在⼀个类型参数后⾯放置协议或者是类,⽐如就要求我们的类型参数 T 遵循 Equatable 协议 关联类...

  • Swift 协议关联类型和约束的理解

    协议 (Protocol) 是 Swift 语言中非常强大而灵活的一个特性。而其中的关联类型就是 Swift 协议...

  • swift方法参数遵守多继承和遵守多个协议

    参数继承协议 OC中 id Swift 3 protocol Swift 4 A & B 文档

  • Swift-泛型

    泛型 将类型参数化,类似于C++中的模板 可以在协议中定一个泛型(关联类型) 用于类型约束 不透明类型(Opaqu...

  • swift 关联类型

    关联类型 定义一个协议时,声明一个或多个关联类型作为协议定义的一部分将会非常有用。关联类型为协议中的某个类型提供了...

  • Swift 泛型 理解

    在swift中,class、struct、enums都可以是用参数化类型来表达泛型的,只有在协议中需要使用asso...

  • Swift4.2_函数

    官网链接 Swift中的每个函数都有一个类型,由函数的参数类型和返回类型组成。 您可以像Swift中的任何其他类型...

网友评论

    本文标题:Swift:协议中关联类型参数可读

    本文链接:https://www.haomeiwen.com/subject/mslmlttx.html