1. 面向协议的理解
2. Swift对所有类型进行扩展,只需要遵守协议即可
直接上demo
//1.结构体--泛型
struct JH<Base> {
var base : Base
init(_ base: Base) {
self.base = base
}
}
//2.协议
protocol JHCompatibal {
}
//3.扩展协议 添加 set get 方法
extension JHCompatibal {
var jh: JH<Self> {
set {}
get {
JH(self)
}
}
static var jh: JH<Self>.Type {
set {}
get {
JH<Self>.self
}
}
}
例如,我想让String扩展某些功能
extension String: JHCompatibal {}
extension JH where Base == String {
var numberCount: Int {
var count = 0
for c in base where ("0"..."9").contains(c) {
count += 1
}
return count
}
func deleteChar(_ resStrType: resStrType) -> String {
var resultStrNumber = ""
var resultStrChar = ""
for c in base {
if ("a"..."z").contains(c) || ("A"..."Z").contains(c){
resultStrChar.append(c)
}
if ("0"..."9").contains(c) || c == "." {
resultStrNumber.append(c)
}
}
switch resStrType {
case .Int:
return resultStrNumber
case .String:
return resultStrChar
}
}
}
/// 使用
let count = "abc000".jh.numberCount
或者想让Int扩展某些功能
extension Int: JHCompatibal {}
extension JH where Base == Int {
var doubleValue: Int {
return self.base * 2
}
}
/// 使用
let doubleV = 2.jh.doubleValue