Swift教程之扩展

Swift教程之扩展,第1张

概述import Foundation//扩展就是添加新功能。扩展和 Objective-C 中的分类(categories)类似。【不过与Objective-C不同的是,Swift 的扩展没有名字。】//扩展可以添加新的计算属性,但是不可以添加存储属性,也不可以向已有属性添加属性观测器(property observers)。//MARK:----------计算型属性(Computed P
import Foundation//扩展就是添加新功能。扩展和 Objective-C 中的分类(categorIEs)类似。【不过与Objective-C不同的是,Swift 的扩展没有名字。】//扩展可以添加新的计算属性,但是不可以添加存储属性,也不可以向已有属性添加属性观测器(property observers)。//MARK:----------计算型属性(Computed PropertIEs)-----//单位转换extension Double{    var km: Double { return self * 1_000.0 }    var m : Double { return self }    var cm: Double { return self / 100.0 }    var mm: Double { return self / 1_000.0 }    var ft: Double { return self / 3.28084 }}let oneInch = 25.4.mmprint("Oneinch is \(oneInch) meters")// 打印输出:"One inch is 0.0254 meters"let threeFeet = 3.ftprint("Three feet is \(threeFeet) meters")// 打印输出:"Three feet is 0.914399970739201 meters"let aMarathon = 42.km + 195.mprint("A marathon is \(aMarathon) meters long")// 打印输出:"A marathon is 42195.0 meters long"//MARK:----------构造器(Initializers)--------struct Size{    var wIDth = 0.0,height = 0.0}struct Point{    var x = 0.0,y = 0.0}struct Rect{    var origin = Point()    var size = Size()}let defaultRect = Rect()let memberwiseRect = Rect(origin: Point(x: 2.0,y: 2.0),size: Size(wIDth: 5.0,height: 5.0))extension Rect{    init(center: Point,size: Size)    {        let originX = center.x - (size.wIDth / 2)        let originY = center.y - (size.height / 2)        self.init(origin: Point(x: originX,y: originY),size: size)    }}let centerRect = Rect(center: Point(x: 4.0,y: 4.0),size: Size(wIDth: 3.0,height: 3.0))// centerRect的原点是 (2.5,2.5),大小是 (3.0,3.0)//MARK:----------方法(Methods)---------//向Int类型添加一个名为repetitions的新实例方法,方法使用了一个() -> ()类型的单参数(single argument),表明函数没有参数而且没有返回值。extension Int{    func repetitions(task: () -> ())    {        for _ in 0..<self        {            task()        }    }}3.repetitions({    print("Hello!")})// Hello!// Hello!// Hello!//MARK:----------修改实例方法(Mutating Instance Methods)---------//通过扩展添加的实例方法也可以修改该实例本身。结构体和枚举类型中修改self或其属性的方法必须将该实例方法标注为mutating,正如来自原始实现的修改方法一样。extension Int{    mutating func square()    {        self = self * self    }}var someInt = 3someInt.square()// someInt 现在值是 9//MARK:---------嵌套类型(nested Types)-----------extension Character{    enum Kind    {        case Vowel,Consonant,Other    }    var kind: Kind    {        switch String(self).lowercaseString        {            case "a","e","i","o","u":                return .Vowel            case "b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z":                return .Consonant            default:                return .Other        }    }}func printLetterKinds(word: String){    print("'\(word)'由如下字母类型组成:")    //appendNewline换行打印    for character in word.characters    {        switch character.kind        {            //元音            case .Vowel:                print("元音字母 ",appendNewline: false)            //辅音            case .Consonant:                print("辅音字母 ",appendNewline: false)            case .Other:                print("其他 ",appendNewline: false)        }    }    print("\n",appendNewline: false)}printLetterKinds("Hello")
总结

以上是内存溢出为你收集整理的Swift教程之扩展全部内容,希望文章能够帮你解决Swift教程之扩展所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1086616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存