您的位置:首页 > 移动开发 > Swift

Swift(二十、扩展)

2015-11-15 11:21 507 查看
1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~

2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。

二十、扩展

向一个已有的类、结构体、枚举类型或协议类型添加新功能。

利用扩展实现在没有权限获取原始源代码的情况下扩展类型的能力(逆向建模)

区别于OC,
Swift
的扩展没有名字


1、Swift扩展提供功能

a、添加计算属性或计算静态属性————>不能添加存储属性,不能添加已有属性的属性观察器

b、定义实例方法和类型方法————>不能重写已有功能

c、提供新的构造器

d、定义下标

e、定义和使用新的嵌套类型

f、使已有类型遵循某个协议

g、对协议进行扩展

2、语法

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


也可适配一个或多个协议

extension SomeType: SomeProtocol, AnotherProctocol {
// 协议实现写到这里
}


3、计算属性-方法-可变实例方法

extension Int {
//计算属性
var km:Int {return self*1_000}
var m :Int {return self}

//添加方法
func repetitions(task:() -> ()) {
for _ in 0..<self {
task()
}
}

//可变实例方法,修改实例本身,mutating参数
mutating func square() {
self = self*self
print(self)
}

}

let oneKM = 1.km
print("One km is \(oneKM) meters")

3.repetitions({
print("Hello")
})

var someInt = 3
someInt.square()


Output:

Hello
Hello
Hello
9


4、添加下标-构造器

扩展可以向已有类型添加新的构造器,也可为自己的创建类型添加,或者提供该类的原始实现中没有包含的额外初始化选项

可以向类中添加新的便利构造器,但是不能添加新的指定构造器或析构器,这两者必须由原始类提供

extension String {
init(string:String,repeatCount:Int) {
var count = repeatCount
if(count <= 1) {
self = string
}else {
self = string
while(count > 1) {
self = self + string
count--
}
}
}

subscript(index:Int) -> Character? {
if index < 0 || index > self.characters.count-1 {
return nil
}
return self[self.endIndex.advancedBy(-index-1)]
}
}

var str:String = "Hello"

print(str[0]!)

var testStr = String(string: "hello", repeatCount: 3)
print(testStr)


Output:

o
hellohellohello
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS开发 Swift 扩展