加上几个关节前Playground摘要码进入github在,凝视写了非常多,主要是为了方便自己的未来可以Fanfankan。

Swift语法的主要部分几乎相同的。

当然也有通用的、运算符重载、ARC、补充倒闭之类的。

一、扩展(extension)

扩展 extension (类似OC中的分类, 但Swift中没有名字), 即在没有权限获取到原始代码的情况下, 为类添加新功能.

注意: 仅仅要定义了扩展, 那么该扩展对该类的实例都是可用的.

extension SomeType{
//加入到SomeType的新功能写在这里
}

1.1扩展属性(仅仅能是计算属性)

//扩展能够加入新计算属性, 可是不能加入存储属性(也不能够加入属性观察).
extension Double{ //为API中的已有类型加入实例属性
var km : Double { return self * 1_000.0 }
var m : Double { return self }
var cm : Double { return self / 100.0 }
} let jjLength = 1.m // 1与m进行点运算, 表示1的Double值
let jjLength_km = 1.km
println(10.km + 1.m)

1.2扩展构造器

//能够定制自己的构造器
class MyClass{
var a : Int
init(){
a = 10
}
} extension MyClass{
convenience init(var parm:Int){ //扩展构造器
self.init()
println("扩展构造器--->便利构造器, \(parm)")
}
} var myClass = MyClass(parm: 9)

1.3扩展方法

以下是像Int中扩展myIntFunc方法

extension Int{
func myIntFunc(){
println("值为\(self) , 哈哈哈哈!")
}
} 1.myIntFunc()

1.3.1 改动实例方法

通过扩展方法, 能够改动该实例self本身.可是方法前要加 mutating

extension Double{
mutating func myMoidfySelfValue{
self = self * self //改动self实例的值
}
} var d = 2.0
d.myMoidfySelfValue()

1.4 扩展嵌套类型

即向已有的嵌套类型中加入新的嵌套类型. 还能够扩展下标(附属脚本)等.

extension Character {
enum Kind{ //嵌套了一个枚举类型
case Big
case Small
}
var k : Kind{
if(String(self).lowercaseString == "a"){
return Kind.Big
}else{
return Kind.Small
}
}
}
var ch : Character = "a"
ch.k //返回一个枚举值Kind.Big

二、协议(protocol)

可定义方法与属性, 由详细的类去实现.
越来越像Java

Swift中的协议能被类, 枚举,结构体实现.

protocol SomeProtocol{
//协议内容
} class SomeClass : SomeProtocol{ //实现协议, 可实现多个协议 }

2.1 协议中属性/方法/突变方法的要求

2.1.1 属性的要求

protocol AnotherProtocol1{
//class表示类成员(结构体/枚举中用static)
class var property : Int { get set} //get, set 表示可读可写
} class AnotherClass1 : AnotherProtocol1{
class var property : Int { //实现协议中的属性
get{
return 10
}
set{ }
}
}

2.1.2 方法要求

//不支持默认參数. 写法上仅仅是没有方法的实现.
protocol AnotherProtocol2{
func myFunc() -> Int //仅仅声明不实现
} class AnotherClass2 : AnotherProtocol2{
func myFunc() -> Int { //实现方法
return 10
}
}

2.1.3 突变方法要求

能在方法或函数内部改变实例类型的方法称为突变方法. (mutatingkeyword)

在类中,能够不写mutating, 但在结构体与枚举中国必须写

protocol Togg{
mutating func togg()
} enum OnOffSwitch : Togg{
case Off , On mutating func togg() { //改变实例的值
switch self{
case .Off:
self = On
case .On:
self = Off
}
}
} var lightSwitch = OnOffSwitch.Off
lightSwitch.togg() //值变为On

2.2 协议类型.

协议也能够当做类型来使用. 这点和函数一样.

1.可作为參数/返回值类型

2.可作为常量/变量/属性的类型

3.可作为数组/字典和其它元素类型

protocol MyRect{
func myLuckNumber() -> Int
} class MyRectImp : MyRect{
func myLuckNumber() -> Int {
return 10
}
} class Dice {
let sides :Int
var gener : MyRect //作为类型
init(sides:Int, gener:MyRect){ //作为參数
self.sides = sides
self.gener = gener
}
} var dice = Dice(sides: 6, gener: MyRectImp())
dice.gener.myLuckNumber() //返回10

演示样例代码见:http://github.com/xn4545945/SwiftLearning

參考:

The Swift Programming Language  

Apple Dev Center



转载请注明出处:http://blog.csdn.net/xn4545945  

版权声明:本文博主原创文章,博客,未经同意不得转载。

【iOS】Swift扩展extension和协议protocol的更多相关文章

  1. Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考

    总结:继承.分类(Category.extension).协议(protocol)   一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...

  2. Swift 扩展(Extension)总结

    概要 扩展是给已经存在的类(class),结构体(structure),枚举类型(enumeration)和协议(protocol)增加新的功能.类似Objective-C中的Category,不同的 ...

  3. 关于iOS 类扩展Extension的进一步理解

    很多人可能会问  iOS的分类和扩展的区别,网上很多的讲解,但是一般都是分类讲的多,而这也是我们平常比较常用的知识:但是,对于扩展,总觉得理解的朦朦胧胧,不够透彻. 这里就讲一下我自己的理解,但是这个 ...

  4. iOS开发系列--Objective-C之协议、代码块、分类

    概述 ObjC的语法主要基于smalltalk进行设计的,除了提供常规的面向对象特性外,还增加了很多其他特性,这一节将重点介绍ObjC中一些常用的语法特性.当然这些内容虽然和其他高级语言命名不一样,但 ...

  5. Swift语言精要 - 扩展(Extension)

    swift的Extension用户在不访问代码的情况下扩展基本结构类型或自定义类 extension Int { var doubled : Int { } func multiplyWith(ano ...

  6. Swift中文教程(七)--协议,扩展和泛型

    Protocols and Extensions 协议(接口)和扩展 Swift使用关键字protocol声明一个协议(接口): 类(classes),枚举(enumerations)和结构(stru ...

  7. Swift和Objective-C中的协议(protocol)有什么异同

    Swift和Objective-C中的protocol的相同点在于:两者可以被用作代理.Objective-C中的protocol类似于Java中的Interface,在实际开发中主要用与适配器模式( ...

  8. iOS阶段学习第19天笔记(协议-Protocol)

    iOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者      之间通讯的一种方式 2) ...

  9. 浅谈iOS开发的协议(protocol)和代理(delegate)

    协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...

随机推荐

  1. hdu1025 Constructing Roads In JGShining's Kingdom (nlogn的LIS)

    题目链接 第一次写nlogn复杂度的LIS,纪念一下. 题目意思是说.有两条平行线.两条平行线都有n个城市,都是从左到右标记为1--n,一条线上是富有城市,一个是贫穷城市.输入n.接下来有n行,p,r ...

  2. 神经网络BP算法C和python代码

    上面只显示代码. 详BP原理和神经网络的相关知识,请参阅:神经网络和反向传播算法推导 首先是前向传播的计算: 输入: 首先为正整数 n.m.p.t,分别代表特征个数.训练样本个数.隐藏层神经元个数.输 ...

  3. 网络协议——IP

    IPv4地址 不论什么网络设备能够经过一个网络接口卡(NIC)接入网,假定该设备要能够访问的其它设备,然后该卡必须有一个唯一的地址.候接入多个网络,相应地该设备就有多个地址.假设这个设备是主机的话.一 ...

  4. swift 笔记 (十八) —— 扩展

    扩展 扩展能够让我们给一个已有的类.结构体.枚举等类型加入�新功能,包含属性和方法,甚至是构造器,下标,支持协议等等... 甚至是我们拿不到源码的类.结构体.枚举,我们依旧能够给它加扩展... 看到这 ...

  5. VS2015配置Andriod开发环境

    原文:VS2015配置Andriod开发环境 折腾了好久终于配置OK了,分享给大家! 第一步: http://xamarin.com/download下载XamarinInstaller 第二步: 运 ...

  6. 对于Hadoop的MapReduce编程makefile

    根据近期需要hadoop的MapReduce程序集成到一个大的应用C/C++书面框架.在需求make当自己主动MapReduce编译和打包的应用. 在这里,一个简单的WordCount1一个例子详细的 ...

  7. 【网络可靠版】Extjs4 Treegrid 使用实例

    最近调试EXTJS 4的treegrid实例,看了很多水友的文章,以及官方的demo, 没一个可靠的,全都无法显示出来.像对于我们习惯用C++的coder来说,EXTJS简直就是一群无政府土匪来维护的 ...

  8. putty中的一些经常使用操作

    (和Linux中操作差点儿相同s) 删除文件夹 rm -rf /home/apache-tomcat-8.0.9 就会把home下的apache-tomcat-8.0.9目录给删除了 删除文件 rm ...

  9. Xamarin.Android 入门实例(3)之呼叫电话号码

    1.Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: ...

  10. Source Insight 3.X 插件支持utf8,完美解决中国乱码,连接到美丽的轮廓

    上次SI多标签插件之后,由于公司内部编码改为utf8编码,因此特意做了这个Source Insight 3.X utf8插件. 下载地址:http://pan.baidu.com/s/1mgyZous ...