泛型技术
创新互联公司专注于郑州企业网站建设,响应式网站设计,成都商城网站开发。郑州网站建设公司,为郑州等地区提供建站服务。全流程按需开发网站,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务何为泛型?
简单理解:代码具有与类型无关的通用性
Objective-C在Xcode7开始,引入了泛型技术的应用
Swift支持相对比较完整的泛型技术
泛型函数
格式: func 函数名<类型>(参数列表)->返回类型 {}
如:
func my_swap<T>(inout value1 value1:T, inout value2:T) {
var tmp:T
tmp = value1
value1 = value2
value2 = tmp
}
var a1 = 10, a2 = 20
my_swap(value1: &a1, value2: &a2)
print("a1=\(a1) a2=\(a2)") //a1=20 a2=10
var b1 = 3.14, b2 = 1.23
my_swap(value1: &b1, value2: &b2) //b1=1.23 b2=3.14
print("b1=\(b1) b2=\(b2)")
通用类型
实现类似Array、Dictionary可以存储各种数据类型
如实现一个栈结构体:
struct Stack<T> {
private var items = [T]()
var count:Int {
get {
return items.count
}
}
mutating func push(value:T) {
items.append(value)
}
mutating func pop()->T? {
if items.count == 0 {
return nil
}
else {
return items.removeLast()
}
}
}
var s:Stack<Int> = Stack<Int>()
s.push(10)
s.push(20)
s.push(30)
print(s.pop())
print(s.pop())
print(s.pop())
再如一个简单的类类型
class A<T> {
var value:T?
}
var a = A<Double>()
a.value = 3.14
类型约束
语法:<T:协议1,协议2,...>
表示T通用类型必须是遵循了协议1、协议2的类型
如:Swift标准库的自带协议Equatable定义了==运算符重载函数的接口
并且大部分Swift的基本数据类型都遵循并实现了该协议
func isEqual<T:Equatable>(left:T, right:T)->Bool {
return left == right
}
print(isEqual(3.14, right: 3.15))
关联类型
关联类型的含义:在协议中使用泛型技术
如:
protocol AProtocol {
typealias itemType //占位类型
func push(item:itemType)
func pop()->itemType?
}
class A:AProtocol {
var items = [Int]()
typealias itemType = Int //******
func push(item: itemType) {
items.append(item)
}
func pop()->itemType? {
if items.count == 0 {
return nil
}
else {
return items.removeLast()
}
}
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文题目:Swift2.0(17)泛型技术-创新互联
网站地址:https://www.cdcxhl.com/article20/jipco.html
成都网站建设公司_创新互联,为您提供外贸建站、网站设计、定制开发、品牌网站建设、网站内链、搜索引擎优化
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联