每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词:

关键词:

用来声明的:

class, deinit, enum, extension, func, import, init, let, protocol, static, struct, subscript, typealias, var

用于子句的:

 break, case, continue, default, do, else, fallthrough, if, in, for, return, switch, where, while

表达式和类型的:

as, dynamicType, is, new, super, self, __COLUMN__, __FILE__, __FUNCTION__, __LINE__

特殊语境使用的:

didSet, get, inout, mutating, override, set, unowned, unowned(safe), unowned(unsafe), weak , willSet

class

用来定义一个类,相信大家并不陌生。

如果定义一个汽车类

class Car
{
init()
{
//to do init something.
}
}

init

相对于类的构造方法的修饰。

deinit

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

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

enum

枚举类型的声明,这个与很多语方都相通。

extension

扩展,有点像oc中的categories 。

Swift 中的可以扩展以下几个:
添加计算型属性和计算静态属性
定义实例方法和类型方法
提供新的构造器
定义下标
定义和使用新的嵌套类型
使一个已有类型符合某个接口

如下面扩展字符串:

 
extension String{
struct _Dummy {
var idxVal: Int
var _padding: Int
var _padding2: Int
var _padding3: Int
}
//过虑出数字
func fitlerCharater() -> String
{
var numberstr : String = ""
for character in self
{
let s :String = String(character) //println(s.toInt())
if let hs = s.toInt()
{
numberstr += character
}
}
return numberstr
} //扩展使用下标访问
subscript (i: Int) -> Character {
var dummy: _Dummy = reinterpretCast(i >= ? self.startIndex : self.endIndex)
dummy.idxVal += i
let idx: String.Index = reinterpretCast(dummy)
return self[idx]
} //扩展使用Range访问
subscript (subRange: Range<Int>) -> String {
var start: _Dummy = reinterpretCast(self.startIndex)
var end = start
start.idxVal = subRange._startIndex
end.idxVal = subRange._endIndex
let startIndex: String.Index = reinterpretCast(start)
let endIndex: String.Index = reinterpretCast(end)
return self[startIndex..endIndex]
}
}

测试:

func testExtension()
{
var str : String = "1234ab5国6cd7中8i90"
println(str.fitlerCharater()) let china: String = "china operating system public to 世界"
println("使用下标索引访问第13个字符 \(china[13])")
println("使用负号下标即变为从右往左访问字符 \(china[-1])")
println("使用负号下标即变为从右往左访问字符 \(china[-2])")
println("使用下标Range来访问范围 \(china[2...6])")
dump(china[..], name: "china[1:4]") //使用dump输出
dump(china[...], name: "china[10:13]")
}

输出:

使用下标索引访问第13个字符 n
使用负号下标即变为从右往左访问字符 界
使用负号下标即变为从右往左访问字符 世
使用下标Range来访问范围 ina o
- china[:]: hina
- china[:]: atin

func

用来修饰函数的关键词。

import

导入头文件,相信大家都不陌生,但在swift 中好像被用来导入包,如import UIKit。 因为swift中没有了头文件的概念。

let

用来修改某一常量的关键词。像const 限定差不多

var

用来声明变量。

protocol

协议,也有称为接口,这个往往在很多高级语言中不能多重继承的情况下使用协议是一个比较好的多态方式。

static

用来修饰变量或函数为静态

struct

用来修饰结构体。

subscript

下标修饰,可以使类(class),结构体(struct),枚举(enum) 使用下标访问。

class Garage
{
var products : String[] = Array() subscript(index:Int) -> String
{
get
{
return products[index]
} set
{
if index < products.count //&& !products.isEmpty
{
products[index] = newValue
}
else
{
products.append(newValue)
} }
}
}

测试:

func testSubscript()
{
var garage = Garage()
garage[] = "A"
garage[] = "B"
garage[] = "C"
garage[] = "D"
garage[] = "CC" println("index 1 = \(garage[0]) ,index 2 = \(garage[1]),index 3 = \(garage[2]) ,index 4 = \(garage[3])")
}

输出

index  = A ,index  = B,index  = CC ,index  = D  

typealias

类型别名,就像typedef一样。借typedef  unsigned long int    UInt64

同样在swift中也可能自定义类型。

break

跳出循环,通常用于for,while,do-while,switch

case

case相信大家并不陌生,常在switch中使用,但如今在swift中多了一个地方使用哪就是枚举类型。

continue

跳过本次循环,继续往后执行。

default

缺省声明。常见在switch中。

do, else,if, for, return, switch, while

这几个就不用多说了,越说越混。

in

范围或集合操作

let str = ""
for c in str
{
println(c)
}

fallthrough

由于swift中的switch语句中可以省去了break的写法,但在其它语言中省去break里,会继续往后一个case跑,直到碰到break或default才完成。在这里fallthrough就如同其它语言中忘记写break一样的功效。

let integerToDescribe =
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case , , , , , , , :
description += " a prime number, and also";
fallthrough
case :
description += " an integer"
default :
description += " finished"
} println(description)

输出:

The number  is a prime number, and also an integer  

where

swift中引入了where 来进行条件判断。

let yetAnotherPoint = (, -)
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 就有点像强制类型转换的意思了。

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

OC的写法:

for (UIView *view  in self.view.subviews)
{
if ([view isKindOfClass:[UIButton class]]) //is 操作
{
UIButton *btn =(UIButton *)view //as 操作
}
}

super

基类的关键语,通常称父类

__COLUMN__, __FILE__, __FUNCTION__, __LINE__

是不是有点像宏定义啊。

println(__COLUMN__ ,__FILE__, __FUNCTION__, __LINE__)  

输出:

(, /Users/apple/Desktop/swiftDemo/swiftDemo/ViewController.swift, viewDidLoad(), )  

set,get

常用于类属性的setter getter操作。

willSet,didSet

在swift中对set操作进行了扩展,willset 在set新值成功前发生,didset在设置新值成功后发生。

inout

对函数参数作为输出参数进行修饰。

func swapTwoInts(inout a: Int, inout b: Int) {
let temporaryA = a
a = b
b = temporaryA
}

mutating

具体不是很理解,好像是专为结构体使用而设置的变体声明

protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
} class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class."
func adjust() {
simpleDescription += " Now 100% adjusted."
}
} struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A simple structure"
mutating func adjust() { //如果去除mutating 报Could not find an overload for '+=' that accepts the supplied arguments
simpleDescription += " (adjusted)"
}
}
 

测试

父子类之间的函数重写,即复盖。

unowned, unowned(safe), unowned(unsafe)

无宿主引用。

[unowned self] 或[unowned(safe) self] 或[unowned(unsafe) self]

weak

弱引用,使得对象不会被持续占有

---

作者:fengsh998
原文地址:http://blog.csdn.net/fengsh998/article/details/32133809
转载请注明出处

Swift 07.关键字的更多相关文章

  1. Swift - mutating关键字的使用

    转载自:http://www.jianshu.com/p/14cc9d30770a  感谢作者:此ID想了很久 Swift中protocol的功能比OC中强大很多,不仅能再class中实现,同时也适用 ...

  2. Swift - defer关键字(推迟执行)

    在一些语言中,有try/finally这样的控制语句,比如Java. 这种语句可以让我们在finally代码块中执行必须要执行的代码,不管之前怎样的兴风作浪. 在Swift 2.0中,Apple提供了 ...

  3. Swift - final关键字的介绍,以及使用场景

    final关键字在大多数的编程语言中都存在,表示不允许对其修饰的内容进行继承或者重新操作.Swift中,final关键字可以在class.func和var前修饰. 通常大家都认为使用final可以更好 ...

  4. Swift之关键字使用(I)

    static和class的使用 static 使用 在非class的类型(包括enum和struct)中,一般使用static来描述类型作用域.在这个类型中,我们可以在类型范围中声明并使用存储属性,计 ...

  5. Swift 特殊关键字 与符号

    #available() 函数来检查API函数的可用性 // 判断当前版本是否 iOS8.0+,OSX10.10+以及以其他平台 if #available(iOS 8.0, OSX 10.10, * ...

  6. swift final关键字、?、!可选与非可选符

    ?符号: 可选型 在初始化时可以赋值为nil !符号:  隐形可选型 类型值不能为nil,如果解包后的可选类型为nil会报运行时错误,主要用在一个变量/常量在定义瞬间完成之后值一定会存在的情况.这主要 ...

  7. Swift的关键字

    在声明中使用关键字 let   :声明一个常量 var :声明一个变量 class :声明一个类 static :静态的 deinit :反初始化方法?析构方法 init :构造方法?初始化方法 en ...

  8. Swift - 07 - 布尔类型

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  9. Swift—final关键字-b

    在类的定义中使用final关键字声明类.属性.方法和下标.final声明的类不能被继承,final声明的属性.方法和下标不能被重写. 下面看一个示例: final class Person { //声 ...

随机推荐

  1. Nginx与Lua利用fpm打成rpm包

    1.下载相关软件 需要软件有:Nginx,LuaJIT,ngx_devel_kit,ngx_lua等安装文件 安装Lua或者LuaJIT都是可以的,但是出于效率的考虑,推荐安装LuaJITshell& ...

  2. [Machine-Learning] 熟悉 Matlab 中的 map

    概述 map 的意思是映射,即将一个变量映射到另一个变量. 比如将一个字符串映射为一个数值,那个字符串就是map 的键值(key),数值就是map的数据(value). 由此可以把map理解为一个哈希 ...

  3. laravel框架总结(十二) -- 关联关系

    这里我们users表对应的模型类名是users,大家特意注意下和user取名的不同 1.一对一关系 1>表A和表B的记录一一对应,比如一个用户对应一个社交账号 数据表的设计如下:   2> ...

  4. Life is short

    相信不少码农曾看过类似“life is short, use Python”等之类略带调侃意味的小段子(譬如我),而其也并非不无道理.每门编程语言都是合理的存在,都有它们的优点,及缺陷. 码农们也大多 ...

  5. MFC动态创建菜单

    http://blog.csdn.net/csdnzhwk/article/details/47395639

  6. Magnifier笔记

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 第二,C语言示例

    #include<stdio.h> int main (void)                 /*WTF*/ { int num; num=1; printf(" I am ...

  8. python 最大公约数

    求解两个整数(不能是负数)的最大公约数(要求两数不能同时为0)当两数都是0时,最大公约数为0方式一:穷举法 def GCU(m, n): if not m: return n elif not n: ...

  9. CSS选择器、标签,div的位置。

    今天是休假,布置了一个作业,是利用CSS制作斯坦福大学官网.虽然是一个并不复杂的制作,却让我第一次体会到了想摔鼠标的感觉. 遇到了很多问题,却找不出自己到底是哪里出了问题,简简单单的一个logo.足足 ...

  10. idea打包java可执行jar包

    1,在项目上鼠标右键 --> Open Module Settings 2, Artifacts --> + --> JAR --> From modules with dep ...