加上几个关节前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. UVA 10404 Bachet's Game(dp + 博弈?)

    Problem B: Bachet's Game Bachet's game is probably known to all but probably not by this name. Initi ...

  2. hdu3570, 超级简单的斜率优化dp

    dp[i] = dp[j] + (a[i] - a[j])^2 + m;展开得 dp[i] = min{dp[j] + a[i]^2 + a[j]^2 - 2*a[i]*a[j] + m}其中a[i] ...

  3. Windows Phone开发(38):动画之PointAnimation

    原文:Windows Phone开发(38):动画之PointAnimation PointAnimation也是很简单的,与前面说到的两个Animation是差不多的,属性也是一样的,如By.Fro ...

  4. 哈希表之bkdrhash算法解析及扩展

    BKDRHASH是一种字符哈希算法,像BKDRHash,APHash.DJBHash,JSHash,RSHash.SDBMHash.PJWHash.ELFHash等等,这些都是比較经典的,通过http ...

  5. 算法入门经典大赛 Dynamic Programming

    111 - History Grading LCS 103 - Stacking Boxes 最多能叠多少个box DAG最长路 10405 - Longest Common Subsequence ...

  6. JDK源码学习系列02----AbstractStringBuilder

     JDK源码学习系列02----AbstractStringBuilder 因为看StringBuffer 和 StringBuilder 的源码时发现两者都继承了AbstractStringBuil ...

  7. uva 10192 Vacation(最长公共子)

    uva 10192 Vacation The Problem You are planning to take some rest and to go out on vacation, but you ...

  8. 【POJ1741】Tree 树分而治之 模板略?

    做广告: #include <stdio.h> int main() { puts("转载请注明出处[vmurder]谢谢"); puts("网址:blog. ...

  9. jQuery照片伸缩效应,这不是一个简单的图像缩放,它不影响其它元素的布局

    之前在网上看到这样的效果,但我没有收藏夹网址,后来被我不知道如何来实现这种效果. 如今,互联网已收集有关专门.真是功夫不负有心人,被我发现. 我也努力过自己尝试着写: 但仅仅是单纯的图片放大.并且还影 ...

  10. 多功能截图工具(WinSnap)4.5.6 绿色汉化版(附注册码)

    http://www.uzzf.com/Soft/9840.html 注册名:www.uzzf.com 注册码:FGE5ML-XD2C0G33-GCMDLRB5