文档章节

初探swift语言的学习笔记七(swift 的关健词)

法斗斗
 法斗斗
发布于 2016/03/03 11:31
字数 1707
阅读 16
收藏 0
点赞 1
评论 0

原文地址: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

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


本文转载自:

共有 人打赏支持
法斗斗
粉丝 20
博文 342
码字总数 17774
作品 0
杨浦
程序员
Go语言基础学习:变量

Go语言基础学习(一)变量 猜你喜欢 Ceylon语言学习笔记(1) 《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言 go语言学习-常量 GO语言学习-复杂类型(2) Go语言学习...

d_watson
2016/04/15
12
0
Swift iOS :我的这5个月的学习过程

2015年,我也去看了下objc,第一感觉很不好,C语言和objc的扩展在一起,特别混乱,当时感觉: 都是函数,C的函数和objc的函数创建和使用差别很大,并且混合在一起 objc函数带着参数标签的,函...

刘传君
2017/09/01
0
0
Swift 个人学习笔记 - 06: 控制流

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/02/22
0
0
Swift 个人学习笔记 - 05: 集合类型(Array, Set, Dictionary)

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/02/22
0
0
2017年年终总结

前言 不知不觉,2017年又接近尾声了,又到了该写年终总结的时候了,往年这个时候都会熙熙攘攘,各大平台提早预热过年的气氛,而今年显得格外的平静,这可能正如我的现在的心境,波澜而不惊!...

韩俊强
01/03
0
0
《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言

《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言 原创文章,欢迎转载。转载请注明:关东升的博客 在Swift语言出现之前,开发iOS或OS X应用主要使用Objective-C...

智捷课堂
2016/02/24
25
0
Swift 个人学习笔记 - 08: 类和结构体

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/03/10
0
0
Swift 个人学习笔记 - 04: 字符串和字符

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/02/16
0
0
Swift 个人学习笔记 - 07: 枚举

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/03/09
0
0
写在新书《Swift开发手册:技巧与实战》出版之际

1月份的时候新书出版了,正值研究生毕业之际,想写点什么又无法抵抗毕业浮躁的心态,所以推到了正式入职之后。首先当然还是想安利一波,新书封面见如下: 2014年年底因为跟同学组队参加竞赛的...

cg1991130
2016/03/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

自定义OkHttp的UA

背景 上次的问题很明显 由于我们的ua清一色OkHttp导致快速定位到内部应用。 既然如此我们是否考虑可以在UA上做点手脚。 自定义我们的UA呢??? 分析 首先UA在 均为okhttp/3.2.0 大概率是由于...

Mr_Qi
21分钟前
0
0
【scikit-learn】01:使用案例对sklearn库进行简单介绍

sklearn学习笔记:Quick Start 源地址:http://scikit-learn.org/stable/tutorial/basic/tutorial.html # -*-coding:utf-8-*-''' Author:kevinelstri Datetime:2017.2.16'''......

wangxuwei
25分钟前
0
0
Linux Kernel 4.16 系列停止维护,用户应升级至 4.17

知名 Linux 内核维护人员兼开发人员 Greg Kroah-Hartman 近日在发布 4.16.18 版本的同时,宣布这是 4.16 系列的最后一个维护版本,强烈建议用户立即升级至 4.17 系列。 Linux 4.16 于 2018 年...

问题终结者
27分钟前
0
0
Apache配置时.htaccess失效不起作用的原因分析

.htaccess 失效的原因 1. 重写规则有问题,检查自己的重写规则 2.Apache配置问题,配置中没有配置启用 rewrite a2enmod rewrite 3.网站配置文件没有启用配置需要配置 000-default.conf <Dire...

TU-DESGIN
47分钟前
1
0
两个求最大公约数C/C++算法实现

#include<stdio.h> #include<time.h> #include <iostream>using namespace std;//求最大公约数 LCD(Largest Common Division)//短除法 //m=8251, n=6105; int LCD_ShortDiv(int m, ......

失落的艺术
53分钟前
1
0
QueryPerformanceCounter

windows的Sleep函数,睡眠线程指定毫秒数,可以用来做毫秒延时。 对于微秒延时,没有一个现成的函数,但是可以通过 QueryPerformanceFrequency QueryPerformanceCounter 来间接实现。原理就是...

开飞色
今天
1
0
log4j2使用AsyncRoot不显示行号问题处理

<AsyncRoot level="info" includeLocation="true"> <AppenderRef ref="File"/></AsyncRoot><!--1.异步logger,还需要在pom.xml中添加disruptor的依赖。2.includeLocation结合异......

小翔
今天
3
0
安卓手机上 K 歌,声音延迟怎么解决?

这篇文章可以为你提供一个解决录音和播放同步问题的思路,而且解决了声音从手机传输到耳机上有延时的问题。 初识音频 在开始之前,我先简单介绍一下音频相关的基础知识,方便下文理解。 我们...

编辑部的故事
今天
2
0
使用token实现在有效期内APP自动登录功能

使用token实现在有效期内APP自动登录功能 http://sevennight.cc/2016/07/19/auto_login_impl.html

风云海滩
今天
2
0
Spring Boot集成RabbitMQ发送接收JSON

默认情况下RabbitMQ发送的消息是转换为字节码,这里介绍一下如何发送JSON数据。 ObjectMapper 最简单发送JSON数据的方式是把对象使用ObjectMapper等JSON工具类把对象转换为JSON格式,然后发送...

小致dad
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部