美文网首页
swift 模型 协议 拓展 泛型 小实践

swift 模型 协议 拓展 泛型 小实践

作者: 简繁之间_来去自然 | 来源:发表于2022-10-25 13:57 被阅读0次

协议支持关联类型 模型支持泛型 协议与模型组成复合体 以供外界遵守协议使用

 let _ = "123".cc.toInt()
 let _ = 123.cc.toString()
 let f:Float = 123.8
 let _ = f.cc.toString()

// 协议支持动态类型 模型支持泛型 协议与模型组成复合体 以供外界遵守协议使用
extension String: ProtocolTo{}
extension Int: ProtocolTo{}
extension Float: ProtocolTo{}
extension CGFloat: ProtocolTo{}

protocol ProtocolTo{
    
    associatedtype U
    
    var cc: ModelForProtocolTo<U> {get}
}

extension ProtocolTo{
    
    var cc:ModelForProtocolTo<Self> {
        
        return ModelForProtocolTo.init(u: self)
    }
}

struct ModelForProtocolTo<U>{
    
    var u:U
    
    init(u:U) {
        self.u = u
    }
}

extension ModelForProtocolTo {
    
    func funcU() {
        NSLog("--==-- funcU \(self.u) \(self)")
    }
}

extension ModelForProtocolTo where U == String {
 
    func toInt() -> Int {
        
        let i:Int = Int(self.u) ?? 0
        return i
    }
}

extension ModelForProtocolTo where U == Float {
    
    func toInt() -> Int {
        
        let i:Int = Int(self.u)
        return i
    }
    func toString() -> String {
        
        let str = "\(self.u)"
        return str
    }
}

extension ModelForProtocolTo where U == CGFloat {
    
    func toInt() -> Int {
        
        let i:Int = Int(self.u)
        return i
    }
    func toString() -> String {
        
        let str = "\(self.u)"
        return str
    }
}

extension ModelForProtocolTo where U == Int {
    
    func toString() -> String {
        
        let str = "\(self.u)"
        return str
    }
}

相关文章

网友评论

      本文标题:swift 模型 协议 拓展 泛型 小实践

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