OC一个类分.h头文件和.m实现文件,Swift只有一个.swift文件,文件数量上Swift比OC少;
Swift是类型安全的语言,也就是变量等的类型必须明确;
Swift引入了可选类型(Optionals),用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值"。
Swift中的!和? 当确定可选类型确实包含值之后,可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping),?表示可选变量即使转换不成功也不会报错,变量值为nil
Swift独有的元组类型 元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型
Swift中使用let修饰常量,使用var修饰变量
OC中非0即是真,Swift中true是真,false是假
Swift的打印print可以print(lastName),不用OC那种%@、%d等
OC与Swift共用一套运行时环境,Swift的类型可以桥接到OC上,反之亦然,两者可以互相引用混合编程。
Swift与OC都是用ARC(自动引用计数)来管理内存
枚举:
OC的枚举相当于这个文件中的一个局部变量,且只能是整型(默认从0开始),也可指定整型值;在同一文件中,不同的枚举中,枚举名称不可以相同。
Swift的枚举,其枚举值支持整型、浮点型、字符串、布尔类型四种;创建时不分配默认整数值;可以通过rawValue访问其原始值;可以通过Week(rawValue:6)创建一个枚举实例
import UIKit
enum Week: Int {
case Mon
case Tues
case Wes
case Thu
case Fri
case Sat
case Sun
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//可以通过rawValue访问其原始值
let fri = Week.Fri.rawValue
print("This is ==\(fri)")
//可以通过Week(rawValue:6)创建一个枚举实例
let ins = Week(rawValue: 6)
print("E \(ins ?? Week.Sat)")
}
}
打印:
This is ==4
E Sun
数组
NSArray是OC中的类型,属于引用类型,Array是Swift中的结构体类型(struct),属于值类型
Swift数组是否可以被修改是通过var和let关键字决定的;OC中数组是否可以被修改是通过NSArray和NSMutableArray这两个类型来决定的;
Swift中数组,数据值被存储进入到某个数组之前类型必须明确,可以显式的类型标注或者类型推断,Swift的数组不必是对象类型,可以存储基本类型,而OC的数组必须是对象类型;
var cities = ["Beijing", "Shanghai", "Guangzhou"]
print(cities)
cities.append("Shenzhen")
print(cities)
var numbers: [Int] = []
numbers.append(888)
print(numbers)
打印:
["Beijing", "Shanghai", "Guangzhou"]
["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]
[888]
字典
Swift的字典是否可以被修改是通过var和let关键字来决定的;
OC的字典是以NSDictionary和NSMutableDictionary来决定的;
Swift的字典的key可以是Int类型,而OC的字典的key一般是字符串类型
var dic1: [String: String] = ["name": "Jane", "age": "20"]
print(dic1)
dic1["height"] = "180"
print(dic1)
var dic2: [Int: String] = [1:"2222"]
print(dic2)
打印:
["name": "Jane", "age": "20"]
["name": "Jane", "age": "20", "height": "180"]
[1: "2222"]