【iOS】Swift中扩展extension与协议protocol

一起连带前面几篇Playground小结代码都转到github上了,注释写了很多,主要方便自己以后可以翻翻看。Swift语法主要部分差不多就这些了。当然还有泛型、运算符重载、ARC、闭包之类的补充。


一、扩展(extension)

扩展 extension (类似OC中的分类Swift中没有名字), 即在没有权限获取到原始代码的情况下为类增加新功能.

注意: 只要定义了扩展, 那么该扩展对该类的实例都是可用的.

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

1.1扩展属性(只能是计算属性)

//扩展可以添加新计算属性, 但是不能添加存储属性(也不可以添加属性观察).
extension Double{  //为API中的已有类型添加实例属性
    var km : Double { return self * 1_000.0 }
    var m : Double { return self }
    var cm : Double { return self / 100.0 }
}

let jjLength = 1.m  // 1与m进行点运算, 表示1的Double值
let jjLength_km = 1.km
println(10.km + 1.m)

1.2扩展构造器

//可以定制自己的构造器
class MyClass{
    var a : Int
    init(){
        a = 10
    }
}

extension MyClass{
    convenience init(var parm:Int){   //扩展构造器
        self.init()
        println("扩展构造器--->便利构造器, \(parm)")
    }
}

var myClass = MyClass(parm: 9)

1.3扩展方法

下面是像Int中扩展myIntFunc方法

extension Int{
    func myIntFunc(){
        println("值为\(self) , 哈哈哈哈!")
    }
}

1.myIntFunc()

1.3.1 修改实例方法

通过扩展方法, 可以修改该实例self本身.但是方法前要加 mutating

extension Double{
    mutating func myMoidfySelfValue{
        self = self * self //修改self实例的值
    }
}

var d = 2.0
d.myMoidfySelfValue()

1.4 扩展嵌套类型

即向已有的嵌套类型中添加新的嵌套类型. 还可以扩展下标(附属脚本).

extension Character {
    enum Kind{   //嵌套了一个枚举类型
        case Big
        case Small
    }
    var k : Kind{
        if(String(self).lowercaseString == "a"){
            return Kind.Big
        }else{
            return Kind.Small
        }
    }
}
var ch : Character = "a"
ch.k   //返回一个枚举值Kind.Big

二、协议(protocol)

可定义方法与属性, 由具体的类去实现. 越来越像Java

Swift中的协议能被类, 枚举,结构体实现.

protocol SomeProtocol{
    //协议内容
}

class SomeClass : SomeProtocol{ //实现协议, 可实现多个协议
    
}

2.1 协议中属性/方法/突变方法的要求

2.1.1 属性的要求

protocol AnotherProtocol1{
    //class表示类成员(结构体/枚举中用static)
    class var property : Int { get set} //get, set 表示可读可写
}

class AnotherClass1 : AnotherProtocol1{
    class var property : Int {  //实现协议中的属性
        get{
            return 10
        }
        set{
            
        }
    }
}

2.1.2 方法要求

//不支持默认参数. 写法上只是没有方法的实现.
protocol AnotherProtocol2{
    func myFunc() -> Int   //只声明不实现
}

class AnotherClass2 : AnotherProtocol2{
    func myFunc() -> Int {  //实现方法
        return 10
    }
}

2.1.3 突变方法要求

能在方法或函数内部改变实例类型的方法称为突变方法. (mutating关键字)

在类中,可以不写mutating, 但在结构体与枚举中国必须写

protocol Togg{
    mutating func togg()
}

enum OnOffSwitch : Togg{
    case Off , On
    
    mutating func togg() { //改变实例的值
        switch self{
        case .Off:
            self = On
        case .On:
            self = Off
        }
    }
}

var lightSwitch = OnOffSwitch.Off
lightSwitch.togg()   //值变为On

2.2 协议类型.

协议也可以当做类型来使用. 这点和函数一样.

1.可作为参数/返回值类型

2.可作为常量/变量/属性的类型

3.可作为数组/字典和其他元素类型

protocol MyRect{
    func myLuckNumber() -> Int
}

class MyRectImp : MyRect{
    func myLuckNumber() -> Int {
        return 10
    }
}

class Dice {
    let sides :Int
    var gener : MyRect    //作为类型
    init(sides:Int, gener:MyRect){  //作为参数
        self.sides = sides
        self.gener = gener
    }
}

var dice = Dice(sides: 6, gener: MyRectImp())
dice.gener.myLuckNumber()   //返回10

示例代码见:http://github.com/xn4545945/SwiftLearning


参考:

The Swift Programming Language  

Apple Dev Center


转载请注明出处:http://blog.csdn.net/xn4545945  



  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
iOS,我们可以使用Action Extension扩展应用程序的功能。Action Extension是一种允许用户在其他应用程序执行特定操作的扩展,例如分享内容、保存信息等。 要创建Action Extension扩展,可以按照以下步骤进行操作: 1. 在Xcode打开你的应用程序项目。 2. 在左侧导航栏选择项目的名称,打开项目设置。 3. 在顶部菜单栏选择"Target"。 4. 点击页面下方的"+"按钮,选择"Action Extension"作为新的目标。 5. 输入Extension的名称,例如"ShareExtension",然后点击"Finish"。 6. Xcode会自动生成一些默认的文件和设置,你可以根据需求进行修改。 7. 打开"Info.plist"文件,配置Action Extension的一些基本信息,例如名称、图标等。 8. 在Action Extension的代码文件,你可以获取分享的内容,并进行相应的处理。 9. 你还可以在Action Extension添加自定义的界面,使用户能够更方便地进行操作。 10. 编译并运行你的应用程序,可以选择其他应用程序的内容,然后在分享菜单找到你的Action Extension,执行相应的操作。 需要注意的是,为了使Action Extension正常工作,还需要在应用程序设置配置一些权限和共享数据的支持。你可以在"Capabilities"选项卡设置对应的权限和所需的共享数据类型。 创建完Action Extension后,你可以将其与应用程序打包在一起分发,用户可以通过在其他应用程序选择分享菜单来使用你的Action Extension。 总的来说,创建iOS的Action Extension扩展是一个相对简单的过程,通过使用Action Extension,你可以方便地为你的应用程序提供更多的功能和交互方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值