Swift开发第五篇——四个知识点(Struct Mutable方法&Tuple&autoclosure&Optional Chain)
本篇分三部分:
一、Struct Mutable方法
二、多元组(Tuple) 的使用
三、autoclosure 的使用
四、Optional Chain 的使用
一、Struct Mutable方法
直接上代码:
struct User {
var weight: Int
var height: Int
// 这里会报错 Left side of mutating operator isn't mutable:'self' is immutable
// 因为 Struct 出来的变量是 immutable 的,想要用一个方法去改变变量里面的值的时候必须要加上一个关键字 mutating
mutating func gainWeight(newWeight: Int) {
weight += newWeight
}
}
var newUser = User(weight: , height: )
newUser.gainWeight()
运行结果: 
二、多元组(Tuple)
多元组是 Swift 的新特性,普通程序员都是定义一个临时变量来保存需要交换的值得,现在我们可以不使用额外空间而使用多元组特性直接交换 a 和 b 的值
func swapMe<T>(inout a: T, inout b: T) {
(a, b) = (b, a)
}
var a = , b =
swapMe(&a, b: &b)
print(a, b) // 输出结果为6 5
三、autoclosure的 基本使用
// 在不使用autoclosure的情况下
func logIfTrue(predicate: () -> Bool) {
if predicate() {
print("True")
}
}
// 第一种调用方式
logIfTrue { () -> Bool in
return true
}
// 第二种调用方式
logIfTrue({return > })
// 第三种调用方式
logIfTrue({ > })
// 第四种调用方式
logIfTrue{ > } // 使用autoclosure
func logIfTrue(@autoclosure predicate: () -> Bool) {
if predicate() {
print("True")
} else {
print("False")
}
}
// 调用方式
logIfTrue( > )
logIfTrue( > )
四、Optional Chain 的使用
class Toy {
let name: String
init(name: String) {
self.name = name
}
}
class Pet {
var toy: Toy?
}
class Child {
var pet: Pet?
}
let toy: Toy = Toy(name: "")
let pet: Pet = Pet()
let xiaoming: Child = Child()
在这里最后访问的是 name,并且在 Toy 的定义中 name 是被定义为一个确定的 String 而非 String? 的,但是我们拿到的 toyName 其实还是一个 String?的类型。这是由于在 Optional Chaining 中我们在任意一个 ? 的时候都可能遇到 nil 而提前返回,这个时候当然就只能拿到 nil 了
let toyName = xiaoming.pet?.toy?.name
// 所以在实际开发中,我们通常使用 Optional Binding 来直接取值:
if let toyName = xiaoming.pet?.toy?.name {
// 这时toyName 就是 String 而非 String? 了
} extension Toy {
func play() {
print("玩玩具~~")
}
} let playClosure = {(child: Child) -> () in
child.pet?.toy?.play()
}
Swift开发第五篇——四个知识点(Struct Mutable方法&Tuple&autoclosure&Optional Chain)的更多相关文章
- Swift开发第十篇——可变参数函数&初始化方法顺序
本篇分为两部分: 一.Swift中的可变参数函数 二.初始化方法的顺序 一.Swift中的可变参数函数 可变参数函数指的是可以接受任意多个参数的函数,在 OC 中,拼接字符串的函数就属于可变参数函数 ...
- JMeter【第五篇】关联:5种方法
前几天在Q群里看到群友发的最近10年性能测试工具使用率的统计,最近的2018年,jmeter+loadrunner占了93%的使用率,说明这两个是主流,其中,jmeter的使用率逐年提升,现在已经超过 ...
- Swift开发第八篇——方法嵌套&命名空间
本篇分为两部分: 一.Swift中的方法嵌套 二.Swift中的命名空间 一.Swift中的方法嵌套 在 swift 中我们可以让方法嵌套方法,如: func appendQuery(var url: ...
- Swift开发第七篇——字面量转换&下标
本篇分为两部分: 一.Swift 中的字面量转换 二.Swift 中的下标 一.Swift 中的字面量转换 所谓字面量就是指像特定的数字,字符串或者是布尔值这样能够直接了当地指出自己的类型并未变量进行 ...
- Swift开发第六篇——操作运算符也可以重载& func 的参数修饰
本篇分为两部分: 1.Swift 中重载操作运算符的使用 2.Swfit 中 func 的参数修饰 1.Swift 中重载操作运算符的使用 与别的语言不同,Swift 支持运算符的重载,运算符指的是“ ...
- Python开发第五篇
面向对象程序设计 面向过程编程:就是分析问题的解决步骤,按部就班的编写代码解决问题 函数式编程:就是把代码封装到函数中,然后在使用时调用封装好的函数 面向对象编程:把一类事物所共有的属性和行为提取出来 ...
- Swift开发第十一篇——Designated、Convenience和Required
本篇主要讲解 Swift 中 Designated.Convenience和 Required 的使用: 在 OC 中 init 方法是非常不安全的,没人能够保证 init 只被调用一次,也没有人保证 ...
- PowerBI开发 第五篇:关系和交互
PowerBI 使用 内存的列式数据库 VertiPaq,用于对已发布的数据集进行数据压缩和快速处理,能够使PowerBI报表执行脱机访问,面向列的处理,高度优化对1:N关系的处理性能.关系是数据分析 ...
- Swift开发第三篇——Playground
本篇分为两部分: 一.Playground的延时运行 二.Playground的可视化 一.Playground的延时运行 Playground 就是提供一个可以即时编译的类似 REPL 的环境,他为 ...
随机推荐
- User Settings in WPF
原文:<User Settings in WPF> Posted on 2014/04/09 =============================================== ...
- 【翻译】C# Tips & Tricks: Weak References - When and How to Use Them
原文:C# Tips & Tricks: Weak References - When and How to Use Them Sometimes you have an object whi ...
- 找出链表中倒数第 k 个结点
/* 题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表 的尾指针. 链表结点定义如下: struct node { int data; struct node * ...
- [Python] Magic editor in Pycharm
From: http://blog.csdn.net/u013088062/article/details/50249751 From:http://blog.csdn.net/u013088062/ ...
- 将STM32的标准库编译成lib
转载自:http://www.cnblogs.com/zyqgold/p/3189719.html 以前一直使用STM32的标准库,需要一步步地将代码加进去,将编译选项设置好,然后再编译整个工程. 这 ...
- Feathers JS – 基于 Express 构建数据驱动的服务
Feathers 是一个轻量的 Web 应用程序框架,基于 NodeJS 最流行的 Web 框架——Express.这使得它很容易使用 socket.io 来创建 RESTful Web 服务和实 ...
- [python]初探socket
1.什么是socket? Socket中文译作:套接字,但是大家一般约定俗称的都用:socket.我想在解释socket是什么之前,先说它是用来干嘛的:socket是来建立'通信'的基础,建立连接,传 ...
- 分享一下我封装iOS自定义控件的体会,附上三个好用的控件Demo <时间选择器&多行输入框&日期选择器>
前段时间有小伙伴问到我:"这样的控件该怎么做呢?",我感觉是个比较简单的控件,可能对于入行不久的同志思路没有很清晰吧.趁着最近工作不忙,就来这里分享一下我封装自定义控件的几点体会吧 ...
- ASP.NET MVC5利用EF,反向自动生成数据库
1.在Model类里面,写好相应的属性. using System; using System.Collections.Generic; using System.Linq; using System ...
- HTML5表单元素的学习
本文内容 认识表单 基本元素的使用 表单高级元素的使用 现学现卖--创建用户反馈表单 ★ 认识 ...