swift学习笔记 - swift中常用关键字

swift中常用关键字
  • **用作声明的关键字: **

classdeinitenumextensionfuncimportinitletprotocolstaticstructsubscripttypealiasvar

  • 用作语句的关键字

breakcasecontinuedefaultdoelsefallthroughifinforreturnswitchwherewhile

  • 用作表达和类型的关键字:

asdynamicTypenewissuperselfSelfType__COLUMN____FILE____FUNCTION____LINE__

  • 特定上下文中被保留的关键字:

associativitydidsetgetinfixinoutleftmutatingnonenonmutatingoperatoroverridepostfixprecedenceprefixrightsetunownedunowned(sale)unowned(unsafe)weakwillset


关键字作用 :

class : 用来声明一个类

enum : 用来声明一个枚举

init : 相对于类的释构方法的修饰。

deinit : 相对于类的释构方法的修饰。

对于类的构造和释构在swift 中需要使用关键词来修饰,而很多高级语言并不需要特别的指定,便C++ 只需要类名与构造函数名相同就可以,不需要额外的关键词。

extension : 扩展.类似于OC的categories.

1. Swift 中的可以扩展以下几个:

2. 添加计算型属性和计算静态属性

3. 定义实例方法和类型方法

4. 提供新的构造器

5. 定义下标

6. 定义和使用新的嵌套类型

7. 使一个已有类型符合某个接口

let : 声明一个常量. 类似于const

protocol : 协议.也可以叫接口.这个往往在很多高级语言中不能多重继承的情况下使用协议是一个比较好的多态方式。

static : 声明静态变量或者函数

struct : 声明定义一个结构体

subscript : 下标索引修饰.可以让class、struct、以及enum使用下标访问内部的值

typealias : 为此类型声明一个别名.和 typedef类似.

break : 跳出循环.一般在控制流中使用,比如 for . while switch等语句

case : switch的选择分支.

continue : 跳过本次循环,继续执行后面的循环.

in : 范围或集合操作,多用于遍历.

fallthrough : swift语言特性switch语句的break可以忽略不写,满足条件时直接跳出循环.fallthrough的作用就是执行完当前case,继续执行下面的case.类似于其它语言中省去break里,会继续往后一个case跑,直到碰到break或default才完成的效果.

switch integerToDescribe {
case 1, 3, 5, 7, 11, 13, 17, 19:
    description += " a prime number, and also";
    fallthrough      // 执行到此并不跳出循环,而是继续执行case5
case 5:
    description += " an integer"    // 执行到这一步,跳出循环
default :
    description += " finished"
}

where : 用于条件判断,和数据库查询时的where ‘id > 10‘这样功能. swift语言的特性.OC中并没有.

let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
println("(\\(x), \\(y)) is on the line x == y")
case let (x, y) where x == -y:
println("(\\(x), \\(y)) is on the line x == -y")
case let (x, y):
println("(\\(x), \\(y)) is just some arbitrary point")

当switch的条件满足where 后面的条件时,才执行语句。

is & as : is一般用于对一些变量的类型做判断.类似于OC中的isKindClass. as 与强制转换含义雷同.

is Example:

for view : AnyObject in self.view.subviews
{
    if view is UIButton
    {
        let btn = view as UIButton;
        println(btn)
    }
}

dynamicType : 获取对象的动态类型,即运行时的实际类型,而非代码指定或编译器看到的类型

__COLUMN__: 列号,

** __FILE__**:路径,

__FUNCTION__: 函数,

__LINE__ : 行号

看打印

associativity: 运算符的结合性

inout : inout作为函数声明时,引用传值的关键字。但是在调用的时候引用的是地址,所以在引用的时候要加上 &,例如:

func test(inout a :Int , inout b :Int){  // 函数内相关操作
}
var  num1 = 3
var  num2 = 10
test(&num1,&num2)

willSet 和 didSet: willSet 和 didSet的作用是对赋值过程前后附加额外的操作

可以看做是捕获状态然后做操作,在将要赋值的时候和已经赋值的时候做相 关操作

mutating : 作用:写在func前面,以便于让func可以修改struct和protocol的extension中的成员的值。 如果func前面不加mutating,struct和protocol的extension中的成员的值便被保护起来,不能修改

class var: 在swift中对于enum和struct来说支持用static关键字来标示静态变量,

但是对于class成员来说,只能以class var的方式返回一个只读值。例如:

struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int { // return an Int value here
  }
}
enum SomeEnumeration {
static var storedTypeProperty = "Some value."
    static var computedTypeProperty: Int {
       // return an Int value here
    }
}
class SomeClass {
      class var computedTypeProperty: Int {
       }
}

这样其实很好的区分了struct和class的功能,

不像C# 抓来一个随便用,但相对于oc来讲其实是弱化了界限,

如果你想在class中搞一个非只读的静态变量出来,可以和struct进行配合。

convenience : convenience用来进行方便的初始化,就相当于构造函数重载。

对于class来讲,默认或指定的初始化方法作为所谓的Designated初始化。

若重载的初始化需要调用Designated初始化则将它作为convenience初始化,在方法前要加上convenience关键字。

class Figure{
       var name:String!
       var nikname:String?
       init(){
          name = "John"
       }
      convenience init(name:String!,nikname:String!) {
           self.init() self.name = name self.nikname = nikname
      }
    }

precedence : 运算的优先级,越高的话优先进行计算。swift 中乘法和除法的优先级是 150 ,加法和减法的优先级是 140 ,这里我们定义点积的优先级为 160 ,就是说应该早于普通的乘除进行运算。

unowned, unowned(safe), unowned(unsafe):无宿主引用。

infix: 表示要定义的是一个中位操作符,即前后都是输入

defer: 用来包裹一段代码,这个代码块将会在当前作用域结束的时候被调用。这通常被用来对当前的代码进行一些清理工作,比如关闭打开的文件等。

可以在同一个作用域中指定多个 defer

代码块,在当前作用域结束时,它们会以相反的顺序被调用,即先定义的后执行,后定义的先执行。

guard : 当某些条件不满足的情况下,跳出作用域.

func testFunc(input:Int) {
         guard input < 10 else  {
               print("Input must < 10")
               return
          }
          print("Input is \\(input)")}
          testFunc(1)
          testFunc(11)

与if用法一样,但是作用与if相反.相比if来说,guard有一个好处:如果不使用return,break,continue,throw跳出当前作用域,编译器会报错.所以,对那些对条件要求十分严格的地方,guard是不二之选。guard也可以使用可选绑定(Optional Binding)也就是 guard let 的格式

func testMathFunc(input:Int?){
    guard let _ = input else  {
         print("Input cannot be nil")
         return
      }
}
 testMathFunc(nil)

PS: set、get 、new、self、super、none、if 、for、return文中没提到的就不一一介绍了。没提到的都是最基本的或者我不知道的或者不常用的关键字,后面接触到新的再继续记录.

作者:花前月下
链接:https://www.jianshu.com/p/1ae8c364954a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/feng9exe/p/8678106.html

时间: 2024-10-25 04:33:49

swift学习笔记 - swift中常用关键字的相关文章

swift学习笔记-----swift中的指针

swift语言为了简化,把指针隐形化了.没有像OC中那样的" * ".把底层的问题交给C语言去处理,我们可以在swift中调用C 语言来解决.当然,OC也是可以调用的. 但是在某些场景下,这种调用可能不是很方便.比如,基于字节流的解析中,这时我们所接受的数据是要进行解析,可能用到指针.如果在C中去调用,当然也是可以的.但如果想写的简洁一些,用swift直接去处理这些,是否可以呢.那就要看在swift中是否很好的去使用指针呢. 事实上,swift是支持使用指针的.苹果已经公开了swift

PHP学习笔记--数组中常用的多种遍历方式

数组的遍历 * * 1. 使用for语句循环遍历数组 * a. 其它语言(只有这一种方式) * b. PHP中这种方式不是我们首选方式 * c. 数组必须是索引数组,而且下标还必须是连续的 * (索引数组下标还可以不连序,数组还有关联数组) * * * 2. 使用foreach语句循环遍历数组 * foreach(数组变量 as 变量值){ * //循环体 * } * a. 循环次数由数组的元素个数决定 * b. 每一次循环都会将数组中的元素分别赋值给后面变量 * * foreach(数组变量

SWIFT学习笔记02

1.//下面的这些浮点字面量都等于十进制的12.1875: let decimalDouble = 12.1875 let exponentDouble = 1.21875e1 let hexadecimalDouble = 0xC.3p0//==12+3*(1/16) 2.//类型别名,用typealias关键字来定义类型别名 typealias AudioSample = UInt16 var maxAmplitudeFound = AudioSample.min 3.//元组 let ht

Swift学习笔记十二:下标脚本(subscript)

下标脚本就是对一个东西通过索引,快速取值的一种语法,例如数组的a[0].这就是一个下标脚本.通过索引0来快速取值.在Swift中,我们可以对类(Class).结构体(structure)和枚举(enumeration)中自己定义下标脚本的语法 一.常规定义 class Student{ var scores:Int[] = Array(count:5,repeatedValue:0) subscript(index:Int) -> Int{ get{ return scores[index];

Swift学习笔记十:属性

1.存储属性       1. 作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值.存储属性可分为变量存储属性(关键字var描述)和常量存储属性(关键字let描述). struct student{ let name = "" var score = 0 } let a = student(name:"小笨狼",score:96)           注意:                ① 定义储存属性时,需要为每一个属性定义一个默认值.在初始化的时候,

Swift学习笔记(一):基础

一.常量 & 变量 //常量 let constantsTeam = 1 //变量 var variablesTeam = 2 尽可能使用常量,这样更清晰并且内存更不容易肾亏. 二.显示/隐式指定类型 //隐式 let inferredTeam = 3 //显式 let explicitTeam:Int = 4 三.字符串输出 //通过\(变量或常量名)来引用组合字符串 println("\(inferredTeam) is bigger than \(variablesTeam)!&q

swift学习笔记(七)自动引用计数

与Object-c一样,swift使用自动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例,因为struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并不是引用计数. 当一个实例被初始化时,系统会自动分配一定的内存空间,用于管理属性和方法.当实例对象不再被使用时,其内存空间被收回. swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主引用unw

Swift学习笔记:类和结构

一.类和结构的异同 类和结构有一些相似的地方,它们都可以: 1. 定义一些可以赋值的属性: 2. 定义具有功能性的方法 3. 定义下标,使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现方法上的可扩展性 根据协议提供某一特定类别的基本功能 1. 类还有一些结构不具备的特性: 2. 类的继承性 3. 对类实例实时的类型转换 4. 析构一个类的实例使之释放空间 5. 引用计数,一个类实例可以有多个引用 1. 定义语法 struct Name{ let firstName = "&quo

Swift学习笔记(15)--下标脚本(Subscripts)

下标脚本可以定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中,使用中类似数组或者字典的用法 1.定义 定义下标脚本使用subscript关键字,语法: subscript(index: Int) -> Int { get { // 返回与入参匹配的Int类型的值 } set(newValue) { // 执行赋值操作 } } 注:newValue的类型必须和下标脚本定义的返回类型相同.与计算型属性相同的是set的入参声明newValue就算不写,在s