Swift 泛型函数【中文参考文档】
泛型使用的基本原则,执行时候需要知道具体泛型类型,即要么通过参数确定类型,要么通过返回值推导类型。
参考文档中已经给出来基本的泛型使用。基本都是通过参数去定类型
通过返回值推导泛型类型
protocol TProtocol{
var desValue: String { get }
}
extension String: TProtocol {
var desValue: String { return self }
}
extension Int: TProtocol {
var desValue: String { return "\(self)" }
}
/// 泛型函数
/// 这里泛型的确定不是通过参数 而是通过返回值确定
/// 泛型协议随意定义的,实际使用不一定需要
func test<T: TProtocol>(value: String) -> T {
return value as! T
}
使用 必须指定变量类型
/// 使用的时候必须指定变量的类型,否则就会出现 Generic parameter 'T' could not be inferred 错误 或者[Cannot specialize a non-generic definition 错误](https://stackoverflow.com/questions/41565366/swift-cannot-specialize-a-non-generic-definition)
let v: String = test(value: "12")