swift学习笔记 - swift中常用关键字
swift中常用关键字
- **用作声明的关键字: **
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、new、is、super、self、Self、Type、__COLUMN__、__FILE__、__FUNCTION__、__LINE__
- 特定上下文中被保留的关键字:
associativity、didset、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、precedence、prefix、rightset、unowned、unowned(sale)、unowned(unsafe)、weak、willset
关键字作用 :
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
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
swift学习笔记 - swift中常用关键字的更多相关文章
- 设计模式学习笔记——java中常用的设计模式
单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Factory Pattern) 策略模式(Strategy Pattern) 适配器模式 ...
- Swift学习笔记 - OC中关于NSClassFromString获取不到Swift类的解决方案
在OC和Swift混编的过程中发现在OC中通过NSClassFromString获取不到Swift中的类,调研了一下发现问题所在,下面是我的解决方案: 问题的发现过程 UIViewController ...
- java学习笔记-继承中super关键字
背景: 在java继承的概念中我们得知,被声明为私有的类成员对所属的类来说仍然是私有的.类之外的任何代码都不能访问,包括子类. super关键字的两种用法: 1.用于调用超类的构造函数: 2.用于访问 ...
- Swift学习笔记 - Swift属性只读
在OC中我们经常用到只读属性,用readonly修饰一下就行了,但在Swift中已经不是这样修饰的了,下面记录一下Swift中只读属性的使用 在OC中的只读: //只读属性 @property(rea ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
- docker学习笔记二:常用命令
docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...
- amazeui学习笔记--css(常用组件16)--文章页Article
amazeui学习笔记--css(常用组件16)--文章页Article 一.总结 1.基本使用:文章内容页的排版样式,包括标题.文章元信息.分隔线等样式. .am-article 文章内容容器 .a ...
- amazeui学习笔记--css(常用组件10)--导航条Topbar
amazeui学习笔记--css(常用组件10)--导航条Topbar 一.总结 1. 导航条:就是页面最顶端的导航条:在容器上添加 .am-topbar class,然后按照示例组织所需内容.< ...
随机推荐
- form&input
<form action="http://www.baidu.com" method="post" autocomplete="on" ...
- SpringBoot(八) Spring和消息队列RabbitMQ
概述 1.大多数应用中,可以通过消息服务中间件来提升系统异步能力和拓展解耦能力. 2.消息服务中的两个重要概念:消息代理(Message broker)和目的地(destination) 当消息发送者 ...
- Codeforces 991E. Bus Number (DFS+排列组合)
解题思路 将每个数字出现的次数存在一个数组num[]中(与顺序无关). 将出现过的数字i从1到num[i]遍历.(i from 0 to 9) 得到要使用的数字次数数组a[]. 对于每一种a使用排列组 ...
- Incorrect integer value: '' for column 'RegNum' at row 1
数据库版本: 5.6.16操作系统: Red Hat Enterprise Linux Server release 6.3 (Santiago)在插入数据的时候提示告警:mysql> ...
- 记一次redis-cluster的切换
# redis-cli -h 10.5.8.18 -c -p 8001 cluster nodes|grep master 6d2f817064a10631648f24f450a37237b3d53f ...
- ZBrush软件特性之Marker标记调控板
在ZBrush®中使用Marker标记调控板来记忆物体属性,因此能在任何时间回到标记并使用它给其他物体或改变物体作为参考点. ZBrush软件下载:http://pan.baidu.com/s/1sl ...
- Android S5PV210 fimc驱动分析 - fimc_capture.c
fimc_capture.c在FIMC系统中的位置,网上偷来的一幅图片 http://blog.csdn.net/kickxxx/article/details/7733482 43 static c ...
- 2019-03-18 用Task Schedule定时调用Python脚本
1.空白处右键新建Task(Create New Task)设置每日定时(Daily) 2.新建Actions 3.填写 Program+Start in 为Python的路径:C:\python36 ...
- C语言使用memcpy函数实现两个数间任意位置的复制操作
c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 用法:void *memcpy(void *dest ...
- 2、Koa2 路由+cookie
一.koa2 原生路由的实现 const Koa = require('koa'); const app = new Koa(); const fs = require('fs'); function ...