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 { //声 ...
随机推荐
- 零配置简单搭建SpringMVC 项目
SpringMVC是比较常用的JavaWeb框架,非常轻便强悍,能简化Web开发,大大提高开发效率,在各种Web程序中广泛应用.本文采用Java Config的方式搭建SpringMVC项目,并对Sp ...
- AndroidManifest.xml详解(上)
本文编辑整理自:http://blog.163.com/hero_213/blog/static/39891214201242835410742/ 一.关于AndroidManifest.xml ...
- Command调用存储过程小实例
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- Hibernate ManyToOne, OneToMany的理解
User to Group, Many to One的关系 Test Case 1: session.beginTransaction(); user.setGroup(group); session ...
- Hibernate映射文件创建和删除触发器,存储过程等数据库对象
创建表,触发器,和存储过程等数据库对象,这里一定要用create 在hibernate.cfg.xml文件中
- [记录][python]python爬虫,下载某图片网站的所有图集
随笔仅用于学习交流,转载时请注明出处,http://www.cnblogs.com/CaDevil/p/5958770.html 该随笔是记录我的第一个python程序,一个爬去指定图片站点的所有图集 ...
- TCP/IP协议学习(六) 链路层详解
学习知识很简单,但坚持不懈却又是如此的困难,即使一直对自己说"努力,不能停下"的我也慢慢懈怠了... 闲话不多说,本篇将讲述TCP/IP协议栈的链路层.在本系列第一篇我讲到,TCP ...
- maven工程使用spring-boot-devtools进行热部署,更改代码避免重启web容器
spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.相关Blog: 点击打开链接 原理是在发现代码有更改之后,重新启动应用 ...
- Ubuntu16.04安装Samba
在新装的ubuntu16.04下安装samba. 安装好samba后备份下配置文件: zhuben@zb:~$ sudo apt-get install samba zhuben@zb:~$ cd / ...
- iBATIS代码生成分析
1.分析目录结构"tools"(或者说模板) 2.首先分析ibatorConfig.xml文件 <?xml version="1.0" encoding= ...