swift
2019-02-20 本文已影响14人
liboxiang
- Swift支持过程式编程和面向对象编程
- Swift支持代码预览,这个革命性的特性可以允许程序员在不编译和运行应用程序的前提下运行 Swift 代码并实时查看结果
- 区别于 C 语言,在 Swift 中你可以对浮点数进行取余运算
- Swift 还提供了 C 语言没有的表达两数之间的值的区间运算符
- 与 C 语言和 Objective-C 不同,Swift 的赋值操作并不返回任何值。所以以下代码是错误的:
if x = y {
// 此句错误, 因为 x = y 并不返回任何值
}
- Swift不要求在每行语句的结尾使用分号(;),但当你在同一行书写多条语句时,必须用分号隔开
- 数值类型:可选类型
使用可选类型(optionals)来处理值可能缺失的情况。可选类型表示有值或没有值(nil)。
Swfit语言定义后缀?作为命名类型Optional的简写,换句话说,以下两种声明是相等的:
var optionalInteger: Int?
var optionalInteger: Optional<Int>
当声明一个可选类型的时候,要确保用括号给?操作符一个合适的范围。例如,声明可选整数数组,应该写成(Int[])?;写成Int[]?会报错。
- Swift 是一个类型安全(type safe)的语言。由于 Swift 是类型安全的,所以它会在编译你的代码时进行类型检查(type checks),并把不匹配的类型标记为错误。这可以让你在开发的时候尽早发现并修复错误。
- 类型推断
如果你没有显式指定类型,Swift 会使用类型推断(type inference)来选择合适的类型。
- 如果你给一个新常量赋值42并且没有标明类型,Swift 可以推断出常量类型是Int
- 如果你没有给浮点字面量标明类型,Swift 会推断你想要的是Double
- 如果表达式中同时出现了整数和浮点数,会被推断为Double类型
- 变量声明
变量声明意思是告诉编译器在内存中的哪个位置上为变量创建多大的存储空间。在使用变量前,你需要使用 var 关键字声明它 - 变量和常量可以使用 print(swift 2 将 print 替换了 println) 函数来输出。
- 十六进制浮点型字面量由前缀 0x 后跟可选的十六进制小数部分以及十六进制指数部分组成。十六进制小数部分由小数点后跟十六进制数字串组成。指数部分由大写或小写字母 p 为前缀后跟十进制数字串组成,这串数字表示 p 之前的数量乘以 2 的几次方。例如:0xFp2 表示 15 ⨉ 2^2,也就是 60;0xFp-2 表示 15 ⨉ 2^-2,也就是 3.75;0xC.3p0表示(12 + 3 x 1/16)x 2^0,也就是12.1875。
- 布尔型字面量:布尔值字面量有三个值(true 表示真、false 表示假、nil 表示没有值)
- switch
在大多数语言中,switch 语句块中,case 要紧跟 break,否则 case 之后的语句会顺序运行,而在 Swift 语言中,默认是不会执行下去的,switch 也会终止。如果你想在 Swift 中让 case 之后的语句会按顺序继续运行(之后的一个case或者default,再后面的不运行),则需要使用 fallthrough 语句。 - do while变成了repeat while
- Swift 中不能创建空的 Character(字符) 类型变量或常量
- Swift 字典的key没有类型限制可以是整型或字符串,但必须是唯一的。
Swift 字典用来存储无序的相同类型数据的集合,Swift 数组会强制检测元素的类型,如果类型不同则会报错。
如果创建一个字典,并赋值给一个变量,则创建的字典就是可以修改的。这意味着在创建字典后,可以通过添加、删除、修改的方式改变字典里的项目。如果将一个字典赋值给常量,字典就不可修改,并且字典的大小和内容都不可以修改。 - 如果创建一个数组,并赋值给一个变量,则创建的集合就是可以修改的。数组只能存放一种固定类型的数据,元组与数组类似,不同的是,元组中的元素可以是任意类型。数组用[],元组用()
- 可变参数函数:可变参数可以接受零个或多个值
func vari<N>(members: N...){
for i in members {
print(i)
}
}
vari(members: 3,4,5)
vari(members: "Google", "Baidu", "W3CSchool")
- 函数, I/O 参数
一般默认的参数传递都是传值调用的,而不是传引用。 所以传入的参数在函数内改变,并不影响原来的那个参数。传入的只是这个参数的副本。如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。
func swapTwoInts(a:inout Int, b:inout Int){
let t = a
a = b
b = t
}
var x = 0,y = 100
print("x = \(x) ;y = \(y)")
swapTwoInts(a:&x, b:&y)
print("x = \(x) ;y = \(y)")
- Swift 中使用 enum 关键词来创建枚举并且把它们的整个定义放在一对大括号内:
enum DaysofaWeek {
case Sunday
case Monday
case TUESDAY
case WEDNESDAY
case THURSDAY
case FRIDAY
case Saturday
}
var weekDay = DaysofaWeek.THURSDAY
weekDay = .Saturday
注:和 C 和 Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值。在上面的DaysofaWeek例子中,Sunday,Monday,……和Saturday不会隐式地赋值为0,1,……和6。相反,这些枚举成员本身就有完备的值
- 为了能够判定两个常量或者变量是否引用同一个类实例,Swift 内建了两个恒等运算符:
恒等运算符(===),如果两个常量或者变量引用同一个类实例则返回 true
不恒等运算符(!==),如果两个常量或者变量引用不同一个类实例则返回 true
- 占用多行的字符串要用三个双引号括起来:
let quotation = """
I said "I have \(apples) apples."
And then I said "I have \(apples + oranges) pieces of fruit."
"""
- ??运算符提供默认值。如果可选值缺失,则使用默认值。
let nickName: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"