Swift(二十、扩展)
发布时间:2020-12-14 01:38:54 所属栏目:百科 来源:网络整理
导读:1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考, 以苹果官方文档为准~ 2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。 二十、扩展 向一个已有的类、结构体、枚举
1、Swift入门学习笔记(第一版),对Swift的基础知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~ 2、在学习完基本的知识点以后会结合官方文档及相关资料,在此版本的基础上进行添加更改。 二十、扩展向一个已有的类、结构体、枚举类型或协议类型添加新功能。 利用扩展实现在没有权限获取原始源代码的情况下扩展类型的能力(逆向建模) 区别于OC, 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |