• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift—泛型(上)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.泛型

泛型是一种非常灵活的语法,允许程序在函数、枚举、结构体、类中定义类型形参,这种类型形参实际代表的类型是动态改变的——程序可以等到真正使用这些函数、枚举、结构体、类时才为这些类型形参传入实际的类型。

2.泛型函数

就是在声明函数时定义一个或多个类型占位符。语法格式如下:
func 函数名<T, S> (形参列表) -> 返回值类型

{

    //函数体

}

func copyArray <T> (src : [T]) -> [T] {
    var arr : [T] = []
    for element in src
    {
        arr.append(element)
    }
    return arr;
}

print(copyArray([1, 2, 3, 4])) //此时T的类型代表Int
//输出 [1, 2, 3, 4]
print(copyArray(["g", "h", "k"])) //此时T的类型代表String
//输出 ["g", "h", "k"]

 定义多个类型参数,根据不同的运算返回不同元素类型。

func projection <SrcType, DescType>(src:[SrcType], fn:(SrcType) -> DescType) -> [DescType] {
    var result = [DescType]()
    for element in src {
        result.append(fn(element))
    }
    return result
}

var books = ["AB", "BCDD", "CDE"]
//计算字符串的长度
var fn :(String)->Int = {$0.characters.count}
var proj = projection(books, fn: fn)

print(proj)
//输出[2, 4, 3]

//字符串拼接
var fn1 :(String)->String = {"《" + $0 + "》"}
var proj1 = projection(books, fn: fn1)

print(proj1)
//输出 ["《AB》", "《BCDD》", "《CDE》"]

 3.泛型类型

泛型不仅可以在函数中使用,也可以在Swift的类型(枚举、结构体、类)中使用。(Swift内置支持的Array、Dictionary就是典型的泛型结构体)

结构体增加泛型参数

struct Rect<T> {
    var x : T
    var y : T
    var weight : T
    var height : T
}
var rect1 : Rect<Int>= Rect.init(x: 1, y: 1, weight: 14, height: 28)
var rect2 : Rect<Double>= Rect.init(x: 1.0, y: 2.0, weight: 14.5, height: 28.2)
print(rect1)
//输出 Rect<Int>(x: 1, y: 1, weight: 14, height: 28)
print(rect2)
//输出 Rect<Double>(x: 1.0, y: 2.0, weight: 14.5, height: 28.2)

 枚举增加泛型参数,是它们适应枚举中的关联值

enum Season<T> {
    case Winter(temp:T)
    case Summer
    case Spring
    case Autumn
}
var w : Season<Int>= Season.Winter(temp: 0)
var w1 : Season<Double> = Season.Winter(temp: -0.2)

 类增加泛型参数

class Apple <T> {
    var info : T
    init(info : T) {
        self.info = info
    }
}

var a = Apple<String>.init(info: "11")
print(a.info)
//输出 11
var a1 = Apple<Double>.init(info: 1.23)
print(a1.info)
//输出 1.23

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
2.7 基本数据类型之间的互相转换 [Swift原创教程]发布时间:2022-07-13
下一篇:
iOS swift HTTPS 9813错误解决记录发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap