文档章节

Swift专题讲解二十——扩展

珲少
 珲少
发布于 2016/05/29 14:40
字数 496
阅读 127
收藏 2

Swift专题讲解二十——扩展

一、简介

        Swift中的扩展与Objective-C中的类别功能相似,扩展可以为一个已有的类、结构体、枚举或者协议添加新的属性或方法,与Objective-C的类别不同的是,Swift中的扩展没有名称。

        Swift中的扩展支持如下功能:

1.添加计算属性

2.定义实例方法和类型方法

3.定义新的构造方法

4.定义下标方法

5.定义嵌套类型

6.使一个已有的类遵守协议

7.对协议进行扩展添加新的方法

二、使用扩展添加计算属性

        使用extension来声明扩展,示例代码如下:

//创建一个类 有两个属性
class MyClass {
    var name:String
    var age:Int
    init(){
        name = "HS"
        age = 24
    }
}
//为MyClass类扩展一个计算属性
extension MyClass {
    var nameAndAge:String{
        return "\(name)"+"\(age)"
    }
}
var obj = MyClass()
obj.nameAndAge

三、使用扩展添加构造方法

        需要注意的是,扩展不能为类添加指定构造方法,只可以为其添加便利构造方法,示例代码如下:

//创建一个类 有两个属性
class MyClass {
    var name:String
    var age:Int
    init(){
        name = "HS"
        age = 24
    }
}
extension MyClass{
    convenience init(name:String,age:Int){
        self.init()
        self.name=name
        self.age=age
    }
}
var obj2 = MyClass(name: "ZYH", age: 24)

四、使用扩展添加实例方法与类型方法

        扩展可以为一个类型添加实例方法与类型方法,示例如下:

//创建一个类 有两个属性
class MyClass {
    var name:String
    var age:Int
    init(){
        name = "HS"
        age = 24
    }
}

extension MyClass{
    func logName() -> String {
        print(name)
        return name
    }
    class func logClassName(){
        print("MyClass")
    }
}

var obj3 = MyClass()
obj3.logName()
MyClass.logClassName()

对于值类型的扩展,可以使用可变方法来修改实例本身,示例如下:

extension Int{
    //修改本身需要使用nutating
    mutating func change() {
         self = self*self
    }
}
var count = 3
count.change()
//打印9
print(count)

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:203317592

© 著作权归作者所有

珲少

珲少

粉丝 886
博文 394
码字总数 475753
作品 0
上海
程序员
私信 提问
Swift专题讲解二十一——协议

Swift专题讲解二十一——协议 一、引言 协议约定了一些属性与方法,其作用类似Java中的抽象类,Swift中类型通过遵守协议来实现一些约定的属性和方法。Swift中的协议使用protocol关键字来声明...

珲少
2016/05/29
157
0
Swift讲解专题十——类与结构体

Swift讲解专题十——类与结构体 一、引言 Swift中的类与结构体十分相似,和Objective-C不同的是,Swift中的结构体不仅可以定义属性,也可以像类一样为其定义方法。 Swift中的类与结构体有如下...

珲少
2016/05/16
112
0
Swift专题讲解二十二——泛型

Swift专题讲解二十二——泛型 一、以泛型为参数的函数 泛型是Swift语言强大的核心,泛型是对类型的抽象,使用泛型开发者可以更加灵活方便的表达代码意图。我们知道,有参函数的参数必须有一个...

珲少
2016/05/30
309
0
Swift专题讲解二十三——高级运算符

Swift专题讲解二十三——高级运算符 一、引言 除了前边博客中介绍的基本运算符外,Swift中还支持更多高级运算符,也支持开发者进行运算符的自定义。Swift中的算符运算符有一个特点,其不会产...

珲少
2016/05/31
1K
1
Swift专题讲解十九——类型转换

Swift专题讲解十九——类型转换 一、类型检查与转换 在Objective-C和Java中,任何类型实例都可以通过强转使编译器认为它是另一种类型的实例,这么做其实是将所有的安全检查工作都交给了开发者...

珲少
2016/05/27
99
0

没有更多内容

加载失败,请刷新页面

加载更多

Knowage 6.2安装部署

注意:需要正确配置JAVA_HOME和JRE_HOME还有catalina_home,否则启动的时候tomcat一闪而过,想要获得报错信息,可以打开cmd,在dos命令行运行开始命令 官网:https://www.knowage-suite.com/s...

阿伦哥-
30分钟前
5
0
c++11 左值引用和右值引用

#include <iostream>using namespace std;void Print(string& s){ cout << s;}int main(){ string s="abc"; Print(s); // OK Print("abc"); // parse error......

SibylY
32分钟前
5
0
浅谈Facade外观模式

一、前言 外观模式是一种非常简单的模式,简单到我们经常都会使用,比如对于类A和B,如果两者需要交互,经过一定的处理过程才能实现某一个具体的功能,那么我们可以将这个处理的过程定义为一...

青衣霓裳
32分钟前
5
0
AnalyticDB for PostgreSQL 6.0 新特性介绍

阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务ACID。ADB PG通过行存储、列存...

Mr_zebra
34分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部