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

Swift入门教程15-扩展(extension)

2014-11-27 21:46 465 查看
原创Blog,转载请注明出处

http://blog.csdn.net/column/details/swift-hwc.html

一、扩展(extensions)的定义

扩展是向一个已有的类、结构体或者枚举添加新的功能。扩展不需要获得原始类的源码。

扩展与objective C中的categories类似

扩展可以增加的功能包括

1、计算属性和计算静态属性(不可以添加存储属性和属性观察期)

2、新的实例方法和类型方法

3、提供新的构造器

4、定义下表标本

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

6、使已有类型符合某个协议

语法

由关键字extension声明

extension SomeType {
// 
}
扩展使其符合某个协议

extension SomeType: SomeProtocol, AnotherProctocol {
// 协议实现写到这里
}
协议这部分后会后续讲解

二、扩展String的实例

不了解String的同学参考我之前写的这篇文章

/article/1374166.html

一个例子涵盖了除了协议外的常用扩展

extension String {  
    //扩展下标脚本
    subscript (r: Range<Int>) -> String {  
        get {  
            let subStart = advance(self.startIndex, r.startIndex, self.endIndex) 
            let subEnd = advance(subStart, r.endIndex - r.startIndex, self.endIndex)  
            return self.substringWithRange(Range(start: subStart, end: subEnd))  
        }  
    }
    //扩展实例方法  
    func substring(#from: Int) -> String {  
        let end = countElements(self)  
        return self[from..<end]  
    }  
    func substring(#from: Int, length: Int) -> String {  
        let end = from + length  
        return self[from..<end]  
    }  
    func substring(#from:Int, to:Int) ->String  
    {  
        return self[from..<to]  
    }
    //定义新的构造器
    init(first:String,second:String)
    {
        self.init(first+second)
    }
    //定义新的嵌套类型,这里的嵌套类型是一个枚举
    //所谓嵌套类型,简单理解就是在一个类型里定义另一个类型
    enum Kind{
        case IsIntStr,NotIntStr
    }
    //定义一个新的实例变量,返回这个字符串是否是可以转换为Int
    var kind:Kind{
        var result:Kind = Kind.IsIntStr
        if self.toInt()? == nil{
            result = .NotIntStr
      	}
        return result	
    }
}  
var str = String(first:"hello ",second:"hwc") 
var str1 = str.substring(from:6)  //hwc
var str2 = str.substring(from:0,to:5)  //hello
var str3 = str.substring(from:0,length:5)//hello
var str4 = str[0...5] //hello
var strKind = str.kind //NotIntStr
if strKind == String.Kind.NotIntStr{
        println("Not an int string")
}
备注:想看下结果的同学直接把这段代码拷贝到palyground中就能看到结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: