初探swift语言的学习笔记七(swift 的关健词)
初探swift语言的学习笔记七(swift 的关健词)
法斗斗 发表于2年前
初探swift语言的学习笔记七(swift 的关健词)
  • 发表于 2年前
  • 阅读 16
  • 收藏 0
  • 点赞 1
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   


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



每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看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

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

如果定义一个汽车类

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. class Car  
  2. {  
  3.       init()  
  4.       {  
  5.             //to do init something.  
  6.        }  
  7. }  

init

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


deinit

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

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


enum

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


extension

扩展,有点像oc中的categories 。

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


如下面扩展字符串:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. extension String{  
  2.     struct _Dummy {  
  3.         var idxVal: Int  
  4.         var _padding: Int  
  5.         var _padding2: Int  
  6.         var _padding3: Int  
  7.     }  
  8.     //过虑出数字  
  9.     func fitlerCharater() -> String  
  10.     {  
  11.         var numberstr : String = ""  
  12.         for character in self  
  13.         {  
  14.             let s :String = String(character)  
  15.               
  16.             //println(s.toInt())  
  17.             if let hs = s.toInt()  
  18.             {  
  19.                 numberstr += character  
  20.             }  
  21.         }  
  22.         return numberstr  
  23.     }  
  24.       
  25.     //扩展使用下标访问  
  26.     subscript (i: Int) -> Character {  
  27.         var dummy: _Dummy = reinterpretCast(i >= 0 ? self.startIndex : self.endIndex)  
  28.             dummy.idxVal += i  
  29.             let idx: String.Index = reinterpretCast(dummy)  
  30.             return self[idx]  
  31.     }  
  32.       
  33.     //扩展使用Range访问  
  34.     subscript (subRange: Range<Int>) -> String {  
  35.         var start: _Dummy = reinterpretCast(self.startIndex)  
  36.             var end = start  
  37.             start.idxVal = subRange._startIndex  
  38.             end.idxVal = subRange._endIndex  
  39.             let startIndex: String.Index = reinterpretCast(start)  
  40.             let endIndex: String.Index = reinterpretCast(end)  
  41.             return self[startIndex..endIndex]  
  42.     }  
  43. }  

测试:
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. func testExtension()  
  2. {  
  3.     var str : String = "1234ab5国6cd7中8i90"  
  4.     println(str.fitlerCharater())  
  5.       
  6.     let china: String = "china operating system public to 世界"  
  7.     println("使用下标索引访问第13个字符 \(china[13])")  
  8.     println("使用负号下标即变为从右往左访问字符 \(china[-1])")  
  9.     println("使用负号下标即变为从右往左访问字符 \(china[-2])")  
  10.     println("使用下标Range来访问范围 \(china[2...6])")  
  11.     dump(china[1..5], name: "china[1:4]")              //使用dump输出  
  12.     dump(china[10...13], name: "china[10:13]")  
  13. }  

输出:
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 1234567890  
  2. 使用下标索引访问第13个字符 n  
  3. 使用负号下标即变为从右往左访问字符 界  
  4. 使用负号下标即变为从右往左访问字符 世  
  5. 使用下标Range来访问范围 ina o  
  6. - china[1:4]: hina  
  7. - china[10:13]: atin  

func

 用来修饰函数的关键词。

import

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

let

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

var

用来声明变量。

protocol

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

static

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

struct

用来修饰结构体。

subscript

下标修饰,可以使类(class),结构体(struct),枚举(enum) 使用下标访问。
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. class Garage  
  2. {  
  3.     var products : String[] = Array()  
  4.       
  5.     subscript(index:Int) -> String  
  6.     {  
  7.         get  
  8.         {  
  9.             return products[index]  
  10.         }  
  11.           
  12.         set  
  13.         {  
  14.             if index < products.count  //&& !products.isEmpty  
  15.             {  
  16.                 products[index] = newValue  
  17.             }  
  18.             else  
  19.             {  
  20.                 products.append(newValue)  
  21.             }  
  22.               
  23.         }  
  24.     }  
  25. }  

测试:
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. func testSubscript()  
  2. {  
  3.     var garage = Garage()  
  4.     garage[0] = "A"  
  5.     garage[1] = "B"  
  6.     garage[2] = "C"  
  7.     garage[3] = "D"  
  8.     garage[2] = "CC"  
  9.       
  10.     println("index 1 = \(garage[0]) ,index 2 = \(garage[1]),index 3 = \(garage[2]) ,index 4 = \(garage[3])")  
  11. }  

输出
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. index 1 = A ,index 2 = B,index 3 = CC ,index 4 = 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

范围或集合操作

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. let str = "123456"  
  2. for c in str  
  3. {  
  4.      println(c)  
  5. }  

fallthrough

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

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. let integerToDescribe = 1  
  2. var description = "The number \(integerToDescribe) is"  
  3. switch integerToDescribe {  
  4. case 1, 3, 5, 7, 11, 13, 17, 19:  
  5.     description += " a prime number, and also";  
  6.     fallthrough  
  7. case 5:  
  8.     description += " an integer"  
  9. default :  
  10.     description += " finished"  
  11. }  
  12.   
  13. println(description)  

输出:
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. The number 1 is a prime number, and also an integer  

where

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

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. let yetAnotherPoint = (1, -1)  
  2. switch yetAnotherPoint {  
  3. case let (x, y) where x == y:  
  4. println("(\(x), \(y)) is on the line x == y")  
  5. case let (x, y) where x == -y:  
  6. println("(\(x), \(y)) is on the line x == -y")  
  7. case let (x, y):  
  8. println("(\(x), \(y)) is just some arbitrary point")  
  9. }  

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

is

as

is 常用于对某变量类型的判断,就像OC中 isKindClass ,as 就有点像强制类型转换的意思了。

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. for view : AnyObject in self.view.subviews  
  2. {  
  3.     if view is UIButton  
  4.     {  
  5.         let btn = view as UIButton;  
  6.         println(btn)  
  7.     }  
  8. }  

OC的写法:
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. for (UIView *view  in self.view.subviews)  
  2. {  
  3.       if ([view isKindOfClass:[UIButton class]])         //is 操作  
  4.      {  
  5.              UIButton *btn =(UIButton *)view             //as 操作  
  6.       }  
  7. }  

super

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

__COLUMN__, __FILE__, __FUNCTION__, __LINE__

是不是有点像宏定义啊。

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. println(__COLUMN__ ,__FILE__, __FUNCTION__, __LINE__)  

输出:
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. (17, /Users/apple/Desktop/swiftDemo/swiftDemo/ViewController.swift, viewDidLoad(), 62)  

set,get

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

willSet,didSet

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

inout

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

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. func swapTwoInts(inout a: Int, inout b: Int) {  
  2.     let temporaryA = a  
  3.     a = b  
  4.     b = temporaryA  
  5. }  

mutating

具体不是很理解,好像是专为结构体使用而设置的变体声明
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. protocol ExampleProtocol {  
  2.     var simpleDescription: String { get }  
  3.     mutating func adjust()  
  4. }  
  5.   
  6. class SimpleClass: ExampleProtocol {  
  7.     var simpleDescription: String = "A very simple class."  
  8.     func adjust() {  
  9.         simpleDescription += "  Now 100% adjusted."  
  10.     }  
  11. }  
  12.   
  13.   
  14. struct SimpleStructure: ExampleProtocol {  
  15.     var simpleDescription: String = "A simple structure"  
  16.     mutating func adjust() {                //如果去除mutating 报Could not find an overload for '+=' that accepts the supplied arguments  
  17.         simpleDescription += " (adjusted)"  
  18.     }  
  19. }  
测试
[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. func testMutating()  
  2. {  
  3.     var a = SimpleClass()  
  4.     a.adjust()  
  5.     let aDescription = a.simpleDescription  
  6.     println(aDescription)  
  7.       
  8.     var b = SimpleStructure()  
  9.     b.adjust()  
  10.     let bDescription = b.simpleDescription  
  11.     println(bDescription)  
  12. }  
override
父子类之间的函数重写,即复盖。

unowned, unowned(safe), unowned(unsafe)

无宿主引用。

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


weak

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


共有 人打赏支持
粉丝 21
博文 293
码字总数 6335
×
法斗斗
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: