协议支持关联类型 模型支持泛型 协议与模型组成复合体 以供外界遵守协议使用
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
}
}
网友评论