swift3.0:associatedtype

E文:https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html

associatedtype用于protocol中 associatedtype类型是在protocol中代指一个确定类型并要求该类型实现指定方法

比如 我们定义一个protocol

protocol Container {
    associatedtype ItemType
    mutating func append(_ item: ItemType)
    var count: Int { get }
    subscript(i: Int) -> ItemType { get }
}

  之后实现这个协议

struct IntStack: Container {
    // original IntStack implementation
    var items = [Int]()
    mutating func push(_ item: Int) {
        items.append(item)
    }
    mutating func pop() -> Int {
        return items.removeLast()
    }
    // conformance to the Container protocol
    typealias ItemType = Int
    mutating func append(_ item: Int) {
        self.push(item)
    }
    var count: Int {
        return items.count
    }
    subscript(i: Int) -> Int {
        return items[i]
    }
}

 其中items实现了ItemType这个代指变量

由于swift的类型推断,你实际上并不需要声明一个具体ItemTypeInt作为定义的一部分IntStack。由于IntStack符合所有的要求Container协议,swift可以推断出适当的ItemType使用,只需通过查看类型append(_:)方法的item参数和标的返回类型。事实上,如果你删除typealias ItemType = Int上面从代码行,一切仍然有效,因为很明显应该使用什么类型ItemType

时间: 2024-08-25 07:31:42

swift3.0:associatedtype的相关文章

swift3.0:CoreData的使用

一.介绍 CoreData不像slqite3那样编写代码繁琐,同时避免了使用了SQL语句的麻烦,也可以回避使用C语言的语法,降低了iOS开发的技术门槛. CoreData可降低开发成本,提高代码质量.它是一个完全面向对象的API,能够合理管理内存,负责在数据库中存储数据,底层也是由类似 于SQL的技术实现的.CoreData是持久化存储的最佳方式,数据最终的存储类型可以是SQLite数据库.XML.二进制.内存或自定义数据类型 它和SQLite的区别是:只能取出整个实体记录,然后分离,之后才能得

swift3.0:NSURLSession的使用

一.说明 NSURLSession是OC中的会话类,在Swift中变成URLSession类,它们的实现方式是一样的,下面的示例就Swift语法进行讲解和介绍. 二.介绍: URLSession 类支持3种类型的任务:加载数据.下载和上传. 加载数据:Data Task 下载数据:Downlaod Task 上传数据:Upload Task 毫无疑问,Session Task是整个URLSession架构的核心目标. 三.示例 第1种Data Task用于加载数据. 使用全局share和func

Swift3.0:Get/Post同步和异步请求

一.介绍 Get和Post区别: Get是从服务器上获取数据,Post是向服务器发送数据. 对于Get方式,服务端用Request.QueryString获取变量的值,对于Post方式,服务端用Request.From获取提交的数据. Get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内的各个字段一一对应. Post是通过HTTP Post机制,将表单内各个字段和其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程. Get

Swift3.0:NSURLConnection的使用

一.介绍 应用中也不必不可少的会使用网络通信,增强客户端和服务器的交互,可以使用NSURLConnection实现http通信. NSURLConnection提供了异步请求和同步请求两种请求方式.同步请求数据会造成主线程阻塞,通常不建议在请求大数据或者网络不畅时使用. 不管是同步请求还是异步请求,建立通信的步骤都是一样的: 1.创建URL对象: 2.创建URLRequest对象: 3.创建NSURLConnection连接: NSURLConnection创建成功后,就创建了一个http连接.

Swift3.0:照片选择

一.介绍 图片选择或者拍照功能: 1.选择相册中的图片或是拍照,都是通过UIImagePickerController控制器实例化一个对象,然后通过self.presentViewController方法推出界面显示.但是使用presentViewController的类需要实现UIImagePickerControllerDelegate.UINavigationController两个代理. 2.UIImagePickerController可以通过isSourceTypeAvailable

Swift2.3 --> Swift3.0 的变化

Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcode帮我们把Swift2.3的代码转换为Swift3.0. 手动调出Xcode自动转换Swift2.3 到 Swift3.0 弹出语言版本选择界面,选择Covert to Swift3,Next:  进入选择模块界面: 选择模块界面 建议只选择自己创建的模块,第三方框架的模块最好不要使用Xco

使用的一些支持swift3.0的开源库

#解决键盘弹起遮挡工具 pod 'IQKeyboardManagerSwift', '~>4.0.6' #多种类型弹出框 pod 'SCLAlertView', :git => 'https://github.com/vikmeup/SCLAlertView-Swift' # Alamofire 网络库 (4.1.0最低支持iOS8.0,4.0最低支持iOS9.0) pod 'Alamofire', '~> 4.0' # swift解析json库 pod 'SwiftyJSON', :g

Swift3.0 函数闭包与OC Block

刚接触Swift,如有不对的点,欢迎指正.转载请说明出处 Swift中定义一个基本函数 //定义一个函数,接收一个字符串,返回一个String类型的值 func test(name:String) -> String { return ("输出了\(name)") } //通用形式 func name(parameters) -> return type { function body } Swift 中基本的闭包函数与OC中Block的相似点 带参闭包 //OC中Bloc

swift3.0 coredata 的使用

//swift3.0在语法上有很大的改变,以简单的增删改查为例,如下: //User类如下: import Foundation import CoreData extension User { @nonobjc public class func fetchRequest() -> NSFetchRequest<User> { return NSFetchRequest<User>(entityName: "User"); } @NSManaged pu