引言

刚开始接触到iOS 开发时,就是运用Swift言语进行开发,在大致看了一下Swift相关文档的目录结构后,感觉跟其他言语大差不差,便随意扫了一遍,可是在接触的时间变长后,渐渐发现,它的许多特别的语法我都给疏忽了,都是遇到时现查一番,本文就是对遇到的特别语法的一个简要总结

关键字

weak

用于声明弱引证,主要用于处理实例循环强引证的问题。在类之间相互引证时,假如运用强引证(默许情况下),或许会导致循环引证,从而造成内存泄漏

本篇文章详细的介绍了weak的用法,同时还提到了另一个处理实例循环强引证问题的关键字unowned

lazy

用于声明延时加载存储特点,将特点的初始化推迟到第一次拜访该特点的时分,而不是在对象初始化时当即履行

  • lazy声明的特点必须声明为变量(var),因为一旦初始化,它们的值能够在后续拜访中改变
  • lazy特点在第一次拜访后会保存其值,因此它只会初始化一次

本篇文章详细介绍了延时加载存储特点的概念

struct 结构体

struct 结构体class 类看起来挺相似的,不管长相仍是写法,可是结构体仍是与有着许多差异的:

  • 值类型
  • 不支撑承继
  • 具有自动生成的成员初始化器
  • 特点默许不可变,要声明为var才可变

本篇文章对比介绍了struct 结构体class 类的差异

最大的差异:struct是值类型,而class是引证类型

private(set)

  • private用于约束整个成员(包括读取和设置)
  • private(set)用于约束特点的设置操作,但外部能读取

Swift提供了五个拜访操控等级的修饰符:openpublicinternalfile privateprivate

拜访等级修饰符都支撑带上一个参数,该参数由一对圆括号和其中的set关键字组成

typealias:类型别号

typealiasSwift中的一个关键字,用于为现有的数据类型(包括结构体枚举协议函数类型等)定义一个别号。这个别号能够用来更方便地引证复杂的数据类型,进步代码的可读性和可维护性

try 和 try?

  • try:显现处理过错

    运用try表明希望捕获或许的过错并进行处理。假如产生过错,程序将抛出一个反常,能够运用do-catch块进行过错处理

  • try?:过错默许返回nil

    运用try?表明希望尽量避免处理过错,而是将成果作为可选值处理。假如代码履行成功,将返回成果值;假如产生过错,将返回nil

运算符

!:强制解析

!可选类型(?)的值强制解包,确定值不会为nil可运用,否则会导致运行崩溃

?:可选类型

可选类型Swift中用于处理或许包括空值(nil)的值的机制。可选类型有两种或许的值:

  • 有值:表明包括了一个详细的值
  • 无值(nil):表明没有值

??:空合并运算符

??的作用是在可选值nil时提供一个默许值,以防止运用可选值时出现nil引发的问题

区间运算符

  • a...b:闭区间运算符。表明一个从ab(包括ab)的闭区间规模
  • a...<b:半开区间运算符。表明一个从ab(包括a,但不包括b)的半开区间规模

特点调查器

  • willSet:在新的值被设置之前调用。能够在特点值即将产生变化时履行额定的代码
  • didSet:在新的值被设置之后调用。能够在特点值产生变化后履行额定的代码
// 在类型 {} 内运用
var property: Int {
    willSet {
        // 在特点值将要被设置前履行的代码
    }
    didSet { 
        // 在特点值被设置后履行的代码 
    }
}

数据类型

字典

字典这个数据类型在其他言语中也有,并不特别,此处列出仅是其写法比较特别,有些类似数组:

[KeyType: ValueType]
// 声明
var person = ["name": "Mary", "age": "18"]
// 增加
person["sex"] = "female"
// 拜访
let personName = person["name"]
// 更新
person["name"] = "Alice"
// 删去
person["name"] = nil

枚举

枚举这个数据结构应该也是不陌生了,此处列出是因为在Swift中广泛的运用枚举相关值这个概念,在此便侧重声明一下

枚举是一种在编程中用于定义命名常量调集的数据类型。枚举是一种有限的、离散的数据类型,它包括一组或许的值

// 带相关值的枚举:能够为枚举成员增加相关值,以便在枚举的不同成员之间传递数据
enum Barcode {
    case upc(Int, Int, Int, Int)
    case qrCode(String)
}

本篇文章详细的介绍了枚举相关的概念

元组

元组这个数据结构在其他的言语(如:Python)也是存在的,此处列出是为了阐明一下在Swift元组的运用操作

元组能够包括不同类型的值,并且能够包括任意数量的值

// 写法一
(value1, value2)
// 写法二
(key1: value1, key2: value2)

key时经过key拜访,没有时经过下标索引拜访

let person1 = ("John", 30)
let name1 = person1.0 
let person2 = (name: "John", age: 30)
let name2 = person2.name

语法

\():字符串插值语法

\()用于将变量、常量、表达式或其他值嵌入到字符串字面量中,以创立一个新的字符串。这允许在字符串中包括变量或表达式的值,使字符串更加动态和可变

guard 句子

guard句子是Swift中用于履行条件查看并提早退出函数、方法或循环的结构之一。它通常与else子句一同运用,用于在条件不满足时履行特定的操作

guard condition else {
}

闭包

Swift中的闭包通常表明为用花括号{}包裹的一段代码块。这个代码块能够承受参数、返回值,以及在其中履行特定的操作

闭包是一种自包括的功能块,能够在代码中传递和引证,也能够在需求时履行

{ (parameters) -> ReturnType in
    // 闭包体,履行特定的操作
}

闭包作为参数传入函数,能使得函数更灵敏、更通用。闭包在作为函数的参数传入时,能够将闭包的闭包体约等于是函数的函数体

尾随闭包:假如函数的最后一个参数是闭包类型,能够将闭包表达式写在函数调用的圆括号外部,作为函数调用的一部分

协议

待更新

小结

言语是根底,你或许会因为各种原因接触到多种言语,可是打牢根底是不管做什么都需求遵循的原则。对于编程,我对打牢言语根底的感悟就是掌握牢固了才干看懂代码~