作为ios开发语言,swift是一门新生语言,大部分时代潮流技术也在其中,而且有自己独有的一些技巧在其中,非常值得学习。
收录:原文地址
目录
语法
· 说明
编程语言都是相通的,因此对于基础的语法都是一样。下面主要是对不同的且重要的语法进行了做了笔记,对于已知或类似的语法没有进行细致的说明。
· 基础
变量以及常量
swift用let定义常量,用var定义变量。对于数据类型则swift自行推断(类型推倒在C++中相当于auto这个类型占位符一样)。常量在设定后,将不能再更改它的值,变量则可以。
如果需要指定类型,则使用类型注解:
var welcomeMessage: String
// 一般不需要写类型注解, 在声明常量或者变量的时候赋了一个初始值,Swift 可以推断出这个常量或者变量的类型
常量和变量名可以包含几乎所有的字符,包括 Unicode 字符:
let π = 3.14159
let 你好 = "你好世界"
let 🐶🐮 = "dogcow"
值得注意的是:
a)在实际项目开发中,应该先定义为let类型,如果需要修改时,再修改类型为var
b)let指的是指向的地址不可修改,但是该对象内容是可修改的(常量不可修改)
元组
// 元组定义
// 1. 字面量定义
var tuple1 = (1, 2.0, "string", true)
// 2. 带参数标签的定义
var tuple2 = (parameter1:int, parameter2:double parameter3:String)
tuple2 = (1, 2.0, "string")
let tuple3 = (parameter1: 1, parameter2: "string")
// 元组取值
// 1. 序列号取值
tuple.0, tuple.1, tuple.2
// 2. 标签取值
tuple2.parameter1
tuple2.parameter2
可选类型
让程序更安全!
在OC中,有一种写法。
NSString *str = [obj getSomeStr] ?: @"";
为了保证str不是nil,在赋值时确定一下。swift提供了可选类型,来处理可能缺失的情况。注意可选类型是一个类型。
var surveyAnswer: String? = "123"
// surveyAnswer 可选值为"123""
// 注意:可选类型为类型后面+?
构造器返回值可选值类型
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// 因为该构造器可能会失败,convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"
// 构造器就是构造函数, 在C++与Java中的叫法
使用if或者while可以进行判断是否有值。这个过程又叫做可选绑定
// 强制解包
let value = surveyAnswer!
// 强制解包如果没值,则会crash,因此使用强制解包要保证有值
// 可选绑定
// if语法在后面介绍
if let newstring = surveyAnswer {
}
// 隐式展开
// 在确定有值的时候,可以直接解包
var a:Int! = 10
var b:Int = a
// 疑问:已经确定有值,还用可选类型干嘛?如:
// var a:Int = 10
// 解答:用可选类型是因为可以使用nil,如果不是可选类型则不能使用nil。
值类型与引用类型
值类型:当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。
引用类型:增加引用计数,不进行拷贝。
其他
类型别名:
swift中不使用typedef , 且有等号。
typealias AudioSample = UInt16
分号:
在swift中不用使用分号, 但是在同一行的两个语句使用分号.
·运算符
空算运算符
如果 a 包含一个值就进行解包,否则就返回一个默认值 b
a != nil ? a! : b
// a必须是可选类型
//
区间运算符
Swift 提供了几种方便表达一个区间的值的区间运算符。
闭区间运算符(a…b)定义一个包含从 a 到 b(包括 a 和 b)的所有值的区间。a 的值不能超过 b。
半开区间运算符(a…<b)定义一个从 a 到 b 但不包括 b 的区间。
单侧区间运算符(a…/…b)可以表达往一侧无限延伸的区间
·字符与字符串
Swift 的 String 和 Character 类型提供了一种快速且兼容 Unicode 的方式来处理代码中的文本内容, 因此可以用任何字符。有趣的是,变量或者常量命名可以采用emoji表情或者汉字。
for character in "Dog!🐶" {
print(character)
}
// D
// o
// g
// !
// 🐶
String是基于 Unicode 标量 建立的. 因此需要了解一下Unicode中的码点, utf-8等概念. 在说到 count和objective-c的length返回的值不一样, 也是由于采取的编码格式不同