Swift 07.关键字
每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看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
弱引用,使得对象不会被持续占有
---
Swift 07.关键字的更多相关文章
- Swift - mutating关键字的使用
转载自:http://www.jianshu.com/p/14cc9d30770a 感谢作者:此ID想了很久 Swift中protocol的功能比OC中强大很多,不仅能再class中实现,同时也适用 ...
- Swift - defer关键字(推迟执行)
在一些语言中,有try/finally这样的控制语句,比如Java. 这种语句可以让我们在finally代码块中执行必须要执行的代码,不管之前怎样的兴风作浪. 在Swift 2.0中,Apple提供了 ...
- Swift - final关键字的介绍,以及使用场景
final关键字在大多数的编程语言中都存在,表示不允许对其修饰的内容进行继承或者重新操作.Swift中,final关键字可以在class.func和var前修饰. 通常大家都认为使用final可以更好 ...
- Swift之关键字使用(I)
static和class的使用 static 使用 在非class的类型(包括enum和struct)中,一般使用static来描述类型作用域.在这个类型中,我们可以在类型范围中声明并使用存储属性,计 ...
- Swift 特殊关键字 与符号
#available() 函数来检查API函数的可用性 // 判断当前版本是否 iOS8.0+,OSX10.10+以及以其他平台 if #available(iOS 8.0, OSX 10.10, * ...
- swift final关键字、?、!可选与非可选符
?符号: 可选型 在初始化时可以赋值为nil !符号: 隐形可选型 类型值不能为nil,如果解包后的可选类型为nil会报运行时错误,主要用在一个变量/常量在定义瞬间完成之后值一定会存在的情况.这主要 ...
- Swift的关键字
在声明中使用关键字 let :声明一个常量 var :声明一个变量 class :声明一个类 static :静态的 deinit :反初始化方法?析构方法 init :构造方法?初始化方法 en ...
- Swift - 07 - 布尔类型
//: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...
- Swift—final关键字-b
在类的定义中使用final关键字声明类.属性.方法和下标.final声明的类不能被继承,final声明的属性.方法和下标不能被重写. 下面看一个示例: final class Person { //声 ...
随机推荐
- AJAX(JS&&JQ&&H5)
一 AJAX的简介: AJAX是"Asynchronous Javascript And XML"(异步JavaScript和XML),通过后台与服务器实现少量的数据交换,可以使页 ...
- Handler 、 Looper 、Message
分析: Looper:prepare和loop public static final void prepare() { if (sThreadLocal.get() != null) { throw ...
- HAProxy配置SSL
前沿 据悉苹果强制APP在2016年底使用ATS协议,所以公司准备将部分站点http统一替换成https.所有我们就得测试下 1.首先原有的haproxy1.5升级到了1.7版本支持ssl 2.查看相 ...
- [原]excel启动时死锁
项目中遇到的一个死锁问题! 代码大概如下: 调用SetWinEventHook安装了进程内钩子,dll注入到excel进程后,专门开启一个线程来分发监听到的事件信息,并在该线程内会获取IAcces ...
- Duiib 创建不规则窗口(转载)
方法一: 转载:http://blog.csdn.net/chenlycly/article/details/46447297 转载:http://blog.csdn.net/harvic880925 ...
- 通知Notification
步骤: 1.调用getSystemService()获取NotificationManager:NotificationManager manager = (NotificationManager)g ...
- web前端之HTML中元素的区分
作为前端人员,我们就是要与各种超文本标记打交道,用到各种不同的标签元素.在使用的时候不知道有没有注意到他们的分类归属?现在就来说一说博主的见解: 目前博主总结了三种分类方法:一是按封闭来划分,一是按显 ...
- Swift_2基础
mport Foundation // MARK: - ?和!的区别// ?代表可选类型,实质上是枚举类型,里面有None和Some两种类型,其实nil相当于OPtional.None,如果非nil相 ...
- IOS苹果和百度地图的相关使用
iOS中使用较多的3款地图,google地图.百度地图.苹果自带地图(高德).其中苹果自带地图在中国使用的是高德的数据.苹果在iOS 6之后放弃了使用谷歌地图,而改用自家的地图.在国内使用的较多的就是 ...
- struts2漏洞集合
[+]1 S2-005 CVE-2010-1870 CVE-2010-1870 影响版本:Struts 2.0.0 – Struts 2.1.8.1 官方公告:http://struts.apache ...