Swift 入门与实践| 青训营笔记

105 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第12天

Swift 入门与实践| 青训营笔记

整体使用下来,感觉swift语法还是有一些麻烦的地方,但相比OC来说肯定是更加现代的语言了,在swift UI编译中,也能够感受到swift速度的优势,对于日常修改UI来说能够更加高效的进行开发和验证,以下是swift的基础语法的总结。

Swift vs. OC

  1. 安全性:
    1. nil值: 可选Optional,不会分配任何内存空间,避免崩溃
    2. 类型安全:必须显示转换
  2. 速度:
    1. 编译型语言,比OC和Python快

Swift基础知识

变量

  1. 可变类型:var
  2. 不可变类型:let`
// 可变变量 
var name: String = "Howard" 
// 不可变变量 
let age: Int = 25
// 类型推断
var name = "Howard" 
let age = 25

数据类型

基本数据类型

  1. 整数类型 Int :-2147483648~2147483647
  • 在32位平台上,Int和Int32长度相同
  • 在64位平台上,Int和Int64长度相同 除非你需要特定长度的整数,一般来说使用Int足够了,Int表示的范围可达到,大多数已经足够了
  1. 无符号整数类型 UInt
  • 在32位平台上,UInt与UInt32长度类型相同
  • 在64位平台上,UInt与UInt64长度类型相同
  1. 浮点数:Float、Double
  • Double:表示64位浮点数。
  • Float:表示32位浮点数。
  1. 布尔值:Bool
  • true
  • false
  1. 字符 Character:单个字母
  2. 字符串 String:字符的集合
  3. 可选类型 Optional:nil

其他数据类型

  1. 数组:
    1. 同一类型
    2. 有序
  2. 字典:
    1. 无序
    2. 每一个值对应唯一的键
  3. 合集:
    1. 同一类型
    2. 不重复
    3. 无序
// 数组
var names: [String] = ["A", "B", "A"]
// 字典
var classes: [String: [String]] = [
    "class A": ["A1", "A2"],
    "class B": ["B1", "B2"],
]
// 合集
var id: Set<String> = ["1", "2", "2", "3"]
print(id) // 1, 2, 3

可选值Optional: nil

let name: String? 
name = "Howard" //如果没有这句赋值,后面将不会打印
if let name = name as ? String {
    print(name) 
}

函数

函数定义和调用

// 定义
func sayHi1(person: String) -> String { let greeting = "Hello, " + person + "!" return greeting } 
func sayHi2(_ person: String) -> String { let greeting = "Hello, " + person + "!" return greeting }

// 调用
print(sayHi1(person: "Howard"))
print(sayHi2("Howard"))

inout引用传递

func swapDouble(_ a: inout Double, _ b: inout Double) { 
let temporaryA = a a = b b = temporaryA 
} 
var a = 8.0 
var b = 7.0 
swapDouble(&a, &b) 
print(a) // 7.0 
print(b) // 8.0 

类:类是引用类型

类的定义、调用与访问

// 定义
class SomeClass { 
    var name: String 
    init(name: String) { 
        self.name = name 
        } 
    // 如果变量已经赋值,无需初始化语法
    // var name: String = ""
} 
// 实例化
let someClass = SomeClass(name: "Howard")
// let someClass = SomeClass()
// 访问属性
print(someClass.name)

类的拓展

拓展:为原有类添加功能、计算属性和方法

  1. 添加计算实例属性和计算类型属性
  2. 定义实例方法和类型方法
  3. 提供新初始化器
extension SomeClass {
    // 提供新初始化器
    init(){}
    // 计算实例属性
    var greet: String { return name + "say Hi" }
    // 定义实例方法
    func greeting->Void { print(self.greet) }
}