摘要:什么是闭包 一个函数和它所捕获的变量\常量环境组合起来,称为闭包 一般指定义在函数内部的函数 一般它捕获的是外层函数的局部变量\常量 可以把闭包想象成是一个类的实例对象 内存在堆空间 捕获的局部变量\常量就是对象的成员(存储属性) 组成闭包的函数就是类内部定义的方法 示例 我们有一个函数 sum /
阅读全文
摘要:前言 在 Swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分 比如Bool、Int、Double、 String、Array、Dictionary等常见类型都是结构体 struct Date { var year: Int var month: Int var day: I
阅读全文
摘要:前言 类的定义和结构体类似,但编译器并没有为类自动生成可以传入成员值的初始化器 如下代码不会报错 struct Point { var x: Int = 0 var y: Int = 0 } let p1 = Point() let p2 = Point(x: 10, y: 20) let p3 =
阅读全文
摘要:一,枚举的基本用法 定义 定义方向的枚举 enum Direction { case north case south case east case west } 上面也可以写成 enum Direction { case north, south, east, west } 使用 var dir
阅读全文
摘要:函数定义 形参默认是let 并且只能是let 无参无返回值 可以省略Void 也可以不省略,如下三种都可以 func sayHello(){ print("hello") } func sayHello() -> (){ print("hello") } func sayHello() -> (Vo
阅读全文
摘要:if-else if后面的条件可以省略小括号, 条件后面的大括号不可以省略 例如下面是可以的 let score = 70 if score >= 80 { print("优秀") }else if score >= 60{ print("及格") }else{ print("不及格") } if后
阅读全文
摘要:值类型(value type) 枚举(enum): optional 结构体(struct): Float、 Double、Float、Int、Character、String、Array、Dictionary、Set 引用类型(reference type) 类(class)
阅读全文
摘要:一,guard 是一种控制流语句 与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代 码是否该被执行。与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。 guard是swift 2.0引入
阅读全文
摘要:一、空合运算符的使用: 当一个可选类型的数据为 nil 时,就默认给它赋一个值,然后再进行运算; “??” 为空合运算符; 如果 “??” 前面的数据为 nil 时,就直接取 “??” 后面的值; 如果 “??” 前面的数据不等于 nil,就将 “??” 前面的数据强制解包,并进行赋值; 示例 例1
阅读全文
摘要:运算符的术语: 操作符分为一元,二元,三元。 一元运算符:主要操作一个单一的目标(比如:-a)。一元前缀运算符可以直接出现在它们的目标前面(比如:!b),一元后缀运算符直接出现在它们目标之后(比如:c!)。 二元运算符:在两个目标(例如2 + 3)上运行,并且是中缀,因为它们出现在两个目标之间。 三
阅读全文
摘要:常量和变量:常量的值一旦设置就不能更改,而变量可以在将来设置为不同的值。常量和变量必须在使用之前声明。 使用let来定义常量,定义之后不可以修改 。即对象首地址不能发生变更,也就是说内存地址不能改变,但也可以修饰可变对象 使用var来定义变量,定义之后可以修改。即内存地址可以发生改变,可以修饰指针重
阅读全文
摘要:近期公司楼下实体店的网络及其不稳定,经常有用户反馈App里的网页打开特别慢,进度条一直加载不完,体验很差,于是就有了webview缓存的需求,项目里使用的是WKWebView,而且苹果早就不提倡使用UIWebView了,这里也不做赘述了。 WKWebView 支持的缓存策略枚举 * 参见 苹果官方文
阅读全文
摘要:一,前言 弹窗又称为对话框,是App与用户进行交互的常见方式之一。弹窗分为模态弹窗和非模态弹窗两种,两者的区别在于需不需要用户对其进行回应。模态弹窗会打断用户的正常操作,要求用户必须对其进行回应,否则不能继续其它操作行为;非模态弹窗则不会影响用户的操作,用户可以不对其进行回应,非模态弹窗通常都有时间
阅读全文
摘要:语句有关键字 switch 苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性 不用显式的加上break。Swift的Switch语句会自动在case结尾处加上break,执行完满足条件的case部分后,就自动退出了。 var i = 3 switch i { case 0: prin
阅读全文
摘要:声明式关键字 associatedtype(关联类型): swift中protocol不能使用<T>这种泛型,但是提供了associatedtype关键字来支持泛型。 由于协议是定义一些规范(属性、功能方法),然后由类、结构体或者枚举遵循并实现这些规范,所以在面对不同的遵循对象时,协议方法的参数,我
阅读全文
摘要:OC里直接可以用{ }申明局部作用域,在swift里可以用 do { } OC中 - (void)layoutSubviews { [super layoutSubviews] ///局部作用域 { CGFloat X = 100.f; CGFloat Y = 150.f; CGFloat W =
阅读全文
摘要:swift中并没有加入宏系统,C语言使用#define定义的基本常量在导入Swift时被Swift编译自动转为Swfit语言的全局变量。但复杂的宏定义不能被Swift转换。Swift中类似宏定义,可以单独创建一个类,如Const.swift,在此类中声明一些常量。 新建文件, 选择iOS -> So
阅读全文
摘要:1. as (1)从派生类转换为基类,向上转型(upcasts) // 定义人员基类 class Person { var name : String init(_ name: String){ self.name = name } } // 定义学生类 class Student : Person
阅读全文
摘要:Swift中支持匿名函数的调用,我们可以使用匿名函数对数据进行初始化操作,如下所示,是一个匿名函数的创建调用操作: { //匿名函数代码 }() 花括号定义匿名函数的函数体,小括号表示调用该匿名函数,这与JS十分相似。 我们可以使用匿名函数对一个属性进行一些复杂的初始化操作,例如下面的代码操作: /
阅读全文
摘要:概述 基础工具: NSLog的方式记录运行时间. 性能工具: 检测各个部分的性能表现,找出性能瓶颈 内存工具: 检查内存正确性和内存使用效率 性能工具: 可以衡量CPU的使用,时间的消耗,电池的消耗 Time Profile 启动Time Profile:Xcode -> Product -> Pr
阅读全文