美文网首页
Kingfisher学习笔记

Kingfisher学习笔记

作者: 传说中的汽水枪 | 来源:发表于2018-08-27 19:29 被阅读4次

K1: protocol及 protocol的extension

public protocol RXTestProtocol {
    var value: String { get }
    var valueImpByExtension: String { get }
    var valueImpByExtensionAndObject: String { get }
    func test()
    func testImpByExtension()
    func testImpByExtensionAndObject()
}

public extension RXTestProtocol {
    // 在protocol的extension中,函数需要有实现
    public func testInExtension() {
        NSLog("testInExtension, value:%@", self.value)
        NSLog("testInExtension, valueImpByExtension:%@", self.valueImpByExtension)
        NSLog("testInExtension, valueImpByExtensionAndObject:%@", self.valueImpByExtensionAndObject)
    }
    
    public var valueImpByExtension: String {
        return "valueImpByExtension"
    }
    public var valueImpByExtensionAndObject: String {
        return "valueImpByExtensionAndObject"
    }
    
    public func testImpByExtension() {
        NSLog("testImpByExtension:%@", self.valueImpByExtension)
    }
    public func testImpByExtensionAndObject() {
        NSLog("testImpByExtensionAndObject:%@", self.valueImpByExtensionAndObject)
    }
}
class RXTestProtocolObject: NSObject, RXTestProtocol {
    var value: String
    var valueImpByExtensionAndObject: String
    func test() {
        NSLog("test in object, value:%@", self.value)
        NSLog("test in object, valueImpByExtension:%@", self.valueImpByExtension)
        NSLog("test in object, valueImpByExtensionAndObject:%@", self.valueImpByExtensionAndObject)
    }
    func testImpByExtensionAndObject() {
        NSLog("test in testImpByExtensionAndObject, valueImpByExtensionAndObject:%@", self.valueImpByExtensionAndObject)
    }
    
    override init() {
        self.value = "abc"
        self.valueImpByExtensionAndObject = "abc object"
    }
}

RXTestProtocolViewController.swift

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let obj = RXTestProtocolObject()
        obj.test()
        obj.testInExtension()
        obj.testImpByExtension()
        obj.testImpByExtensionAndObject()
        self.view.backgroundColor = UIColor.white
    }

输出:

2018-08-27 19:51:58.974901+0800 RXSwiftDemo[8372:3788328] test in object, value:abc
2018-08-27 19:51:58.974950+0800 RXSwiftDemo[8372:3788328] test in object, valueImpByExtension:valueImpByExtension
2018-08-27 19:51:58.974965+0800 RXSwiftDemo[8372:3788328] test in object, valueImpByExtensionAndObject:abc object
2018-08-27 19:51:58.974977+0800 RXSwiftDemo[8372:3788328] testInExtension, value:abc
2018-08-27 19:51:58.974989+0800 RXSwiftDemo[8372:3788328] testInExtension, valueImpByExtension:valueImpByExtension
2018-08-27 19:51:58.975000+0800 RXSwiftDemo[8372:3788328] testInExtension, valueImpByExtensionAndObject:abc object
2018-08-27 19:51:58.975012+0800 RXSwiftDemo[8372:3788328] testImpByExtension:valueImpByExtension
2018-08-27 19:51:58.975023+0800 RXSwiftDemo[8372:3788328] test in testImpByExtensionAndObject, valueImpByExtensionAndObject:abc object

由上述我们可以得知:
extension可以理解是实现了protocol(半实现,不必要全部实现),其他object在实现的protocol的时候会覆盖extension

K2: associatetype

public protocol RXATTestProtocol {
    associatedtype DataType
    var value1: DataType { get }
    var value2: DataType { get }
}
class RXATTestProtocolObject: NSObject, RXATTestProtocol {
    // 输入value1的时候,自动代码提示为 RXATTestProtocolObject.DataType
    var value1: String
    // 在输入value2的时候,自动代码提示为 String
    var value2: String
    override init() {
        self.value1 = "abc"
        self.value2 = "aaaa"
    }
}

K3: 泛型以及模板

public class RXTemplateTestObject <T> {
    public let value: T
    public init(_ value: T) {
        self.value = value
    }
}
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let obj1: RXTemplateTestObject = RXTemplateTestObject<Int>(1)
        let obj2: RXTemplateTestObject = RXTemplateTestObject<String>("abc")
        NSLog("obj1:%zd, obj2:%@", obj1.value, obj2.value)
    }

K4: 函数内部定义一个函数

OC 与 swift区别
OC:1.定义一个block 2. 在外部定义一个函数
swift:1.定义一个func 2. 定义一个block?

相关文章

网友评论

      本文标题:Kingfisher学习笔记

      本文链接:https://www.haomeiwen.com/subject/prwtwftx.html