我是否可以将泛型类型添加到Swift';什么是别名?

我是否可以将泛型类型添加到Swift';什么是别名?,swift,generics,Swift,Generics,我有这个typealias用于网络呼叫的回调 typealias GenericReturn = ((Bool, Int, GenericModel)->Void); 但后来我意识到有时我也需要: typealias UserReturn = ((Bool, Int, UserModel)->Void); typealias PriceReturn = ((Bool, Int, PriceModel)->Void); typealias ClientReturn = ((Bo

我有这个
typealias
用于网络呼叫的回调

typealias GenericReturn = ((Bool, Int, GenericModel)->Void);
但后来我意识到有时我也需要:

typealias UserReturn = ((Bool, Int, UserModel)->Void);
typealias PriceReturn = ((Bool, Int, PriceModel)->Void);
typealias ClientReturn = ((Bool, Int, ClientModel)->Void);
typealias ProductReturn = ((Bool, Int, ProductModel)->Void);
typealias CartReturn = ((Bool, Int, CartModel)->Void);
我可以使用某种通用语法简化这个
typealias
?可能像:

typealias GenericReturn<T> = ((Bool, Int, T)->Void);
typealias GenericReturn=((Bool,Int,T)->Void);

谢谢。

您可以使用以下代码作为泛型类型别名

typealias MapResult<T> = (_ result: () throws -> T) -> Void
typealias-mapreult=(\uresult:()抛出->T)->Void
并在代码中使用它映射网络结果,如下所示:

func getSomeData(completion: @escaping MapResult<YourModel>) {
    let url = "Some Url"
    network.get(from: url) { (inner) in
        do {
            let result = try inner()
            let model: YourModel = try mapObject(result) 
            completion { return YourModel }
        } catch let error {
            completion { throw error}
        }
    }
}
func mapObject<T: Unmarshaling>(_ data: Data) throws -> T {
    return try T(object: try JSONParser.JSONObjectWithData(data))
}
func getSomeData(完成:转义MapResult){
让url=“一些url”
get(from:url){(内部)在
做{
让结果=尝试内部()
让model:YourModel=尝试mapObject(结果)
完成{返回您的模型}
}捕捉错误{
完成{抛出错误}
}
}
}
根据反序列化结果的方式,我使用的mapObject如下:

func getSomeData(completion: @escaping MapResult<YourModel>) {
    let url = "Some Url"
    network.get(from: url) { (inner) in
        do {
            let result = try inner()
            let model: YourModel = try mapObject(result) 
            completion { return YourModel }
        } catch let error {
            completion { throw error}
        }
    }
}
func mapObject<T: Unmarshaling>(_ data: Data) throws -> T {
    return try T(object: try JSONParser.JSONObjectWithData(data))
}
func映射对象(u-data:data)抛出->T{
返回try T(对象:try JSONParser.JSONObjectWithData(数据))
}
对于映射数组:

func mapArray<T: Unmarshaling>(_ data: Data) throws -> [T] {
    return try JSONParser.JSONArrayWithData(data).map(T.init)
}
func映射数组(u-data:data)抛出->[T]{
返回try JSONParser.JSONArrayWithData(data).map(T.init)
}

您可以使用以下代码作为泛型类型别名

typealias MapResult<T> = (_ result: () throws -> T) -> Void
typealias-mapreult=(\uresult:()抛出->T)->Void
并在代码中使用它映射网络结果,如下所示:

func getSomeData(completion: @escaping MapResult<YourModel>) {
    let url = "Some Url"
    network.get(from: url) { (inner) in
        do {
            let result = try inner()
            let model: YourModel = try mapObject(result) 
            completion { return YourModel }
        } catch let error {
            completion { throw error}
        }
    }
}
func mapObject<T: Unmarshaling>(_ data: Data) throws -> T {
    return try T(object: try JSONParser.JSONObjectWithData(data))
}
func getSomeData(完成:转义MapResult){
让url=“一些url”
get(from:url){(内部)在
做{
让结果=尝试内部()
让model:YourModel=尝试mapObject(结果)
完成{返回您的模型}
}捕捉错误{
完成{抛出错误}
}
}
}
根据反序列化结果的方式,我使用的mapObject如下:

func getSomeData(completion: @escaping MapResult<YourModel>) {
    let url = "Some Url"
    network.get(from: url) { (inner) in
        do {
            let result = try inner()
            let model: YourModel = try mapObject(result) 
            completion { return YourModel }
        } catch let error {
            completion { throw error}
        }
    }
}
func mapObject<T: Unmarshaling>(_ data: Data) throws -> T {
    return try T(object: try JSONParser.JSONObjectWithData(data))
}
func映射对象(u-data:data)抛出->T{
返回try T(对象:try JSONParser.JSONObjectWithData(数据))
}
对于映射数组:

func mapArray<T: Unmarshaling>(_ data: Data) throws -> [T] {
    return try JSONParser.JSONArrayWithData(data).map(T.init)
}
func映射数组(u-data:data)抛出->[T]{
返回try JSONParser.JSONArrayWithData(data).map(T.init)
}

我想您已经测试过了?编译器在Swift 3和Swift 4中都没有抱怨,它在使用Swift 3的游戏组中运行良好。你试过了吗?等等。以前没用过。现在它起作用了。我不知道我上次试了什么,但没用。我不知道这是否存在,所以我以前可能使用了一些错误的语法。我想你已经测试过了?编译器在Swift 3和Swift 4中都没有抱怨,它在使用Swift 3的游戏组中运行良好。你试过了吗?等等。以前没用过。现在它起作用了。我不知道我上次试了什么,但没用。我甚至不知道这是否存在,所以我以前可能使用了一些错误的语法。如何调用
getSomeData
函数及其完成示例?这就像使用完成调用一个简单的方法:
getSomeData{(inner)in do{let result=try inner()//这里有Model对象}}catch let error{}
如何调用
getSomeData
函数及其完成示例?这就像在do{let result=try internal()中调用一个简单的完成方法:
getSomeData{(internal)//这里有模型对象}}catch let error{}