• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > Swift心得笔记之集合类型

Swift心得笔记之集合类型

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了swift报文类型,swift类型转换,taylor swift,swift,swift code是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

数组

重复值的初始化

除了普通的初始化方法,我们可以通过 init(count: Int, repeatedValue: T) 来初始化一个数组并填充上重复的值:

// [0.0,0.0,0.0]
var threeDoubles = [Double](count:3,repeatedValue:0.0)
</div>

带索引值的遍历

我们可以用 for in 遍历数组,如果想要 index 的话,可以用 enumerate<Seq : SequenceType>(base: Seq) :

let arr = ["a","b"]
for (index, value) in enumerate(arr) {
    println("\(index):\(value)")
}
// 0:a
// 1:b
</div>

赋值与拷贝

Swift 中数组和字典均是结构体的形式实现的,和 NSArray 那一套不太一样,所以赋值的时候其实是给了一份拷贝:

let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
cinema.height = 233
cinema  // 1920 233
hd      // 1920 1080
</div>

高阶函数

Swift 有一些 Higher Order Functions :map、filter和reduce。使用得当的话可以省去很多不必要的代码。

map

map 可以把一个数组按照一定的规则转换成另一个数组,定义如下:

func map<U>(transform: (T) -> U) -> U[]
</div>

也就是说它接受一个函数叫做 transform ,然后这个函数可以把 T 类型的转换成 U 类型的并返回 (也就是 (T) -> U),最终 map 返回的是 U 类型的集合。

下面的表达式更有助于理解:

[ x1, x2, ... , xn].map(f) -> [f(x1), f(x2), ... , f(xn)]
</div>

如果用 for in 来实现,则需要这样:

var newArray : Array<T> = []
for item in oldArray {
    newArray += f(item)
}
</div>

举个例子,我们可以这样把价格数组中的数字前面都加上 ¥ 符号:

var oldArray = [10,20,45,32]
var newArray = oldArray.map({money in "¥\(money)"})
println(newArray) // [¥10, ¥20, ¥45, ¥32]
</div>

如果你觉得 money in 也有点多余的话可以用 $0 :

newArray = oldArray.map({"\($0)€"})
</div>

filter

方法如其名, filter 起到的就是筛选的功能,参数是一个用来判断是否筛除的筛选闭包,定义如下:

func filter(includeElement: (T) -> Bool) -> [T]
</div>

还是举个例子说明一下。首先先看下传统的 for in 实现的方法:

var oldArray = [10,20,45,32]
var filteredArray : Array<Int> = []
for money in oldArray {
    if (money > 30) {
        filteredArray += money
    }
}
println(filteredArray)
</div>

奇怪的是这里的代码编译不通过:

Playground execution failed: <EXPR>:15:9: error: 'Array<Int>' is not identical to 'UInt8'
        filteredArray += money
</div>

发现原来是 += 符号不能用于 append ,只能用于 combine ,在外面包个 [] 即可:

var oldArray = [10,20,45,32]
var filteredArray : Array<Int> = []
for money in oldArray {
    if (money > 30) {
        filteredArray += [money]
    }
}
println(filteredArray) // [45, 32]
</div>

(靠。。居然忘了贴 filter 的用法,写到后面才发现。。)

用 filter 可以这样实现:

var oldArray = [10,20,45,32]
var filteredArray  = oldArray.filter({
    return $0 > 30
})
println(filteredArray) // [45, 32]
</div>

你真的好短啊!

reduce

reduce 函数解决了把数组中的值整合到某个独立对象的问题。定义如下:

func reduce<U>(initial: U, combine: (U, T) -> U) -> U
</div>

好吧看起来略抽象。我们还是从 for in 开始。比如我们要把数组中的值都加起来放到 sum 里,那么传统做法是:

var oldArray = [10,20,45,32]
var sum = 0
for money in oldArray {
    sum = sum + money
}
println(sum) // 107
</div>

reduce 有两个参数,一个是初始化的值,另一个是一个闭包,闭包有两个输入的参数,一个是原始值,一个是新进来的值,返回的新值也就是下一轮循环中的旧值。写几个小例子试一下:

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift 数据类型
  • Swift 可选(Optionals)类型
  • Swift 类型转换
  • 详解Swift中的数据类型类型转换
  • 实例讲解Swift中引用类型的ARC自动引用计数
  • Swift编程之枚举类型详解
  • Swift编程中的一些类型转换方法详解
  • 深入解析Swift编程中枚举类型的相关使用
  • Swift内置的数字类型及基本的转换方法
  • Swift类型创建之自定义一个类型详解

相关文章

  • 2017-05-28微信小程序 navigator 跳转url传递参数
  • 2017-05-28Swift编程中的一些类型转换方法详解
  • 2017-05-28iOS socket网络编程实例详解
  • 2017-05-28Swift中的条件切换语句switch...case学习教程
  • 2017-05-28Swift编程中用以管理内存的自动引用计数详解
  • 2017-05-28Swift教程之函数详解
  • 2017-05-28Swift内置的数字类型及基本的转换方法
  • 2017-05-28swift3.0指纹解锁的实现方法
  • 2017-05-28Switch语句的技巧
  • 2017-05-28使用Post方法模拟登陆爬取网页的实现方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • MySQL+SSM+Ajax上传图片问题
    • Swift 协议
    • Swift中swift中的switch 语句
    • 深入解析Swift中switch语句对case的数据类型匹配的支持
    • Swift的函数式编程详解
    • swift 可选型的使用详解
    • Swift 3.0将UILabel数字颜色设置为红色的方法
    • Swift UILable 设置内边距实例代码
    • Swift与C语言指针结合使用实例
    • 在Swift程序中实现手势识别的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有