已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
3天前关闭。
Improve this question
我正在Swift中开发一个函数,它接受一个泛型并返回一个可选的泛型。我遇到的问题是测试可选的返回类型泛型。在下面的代码中,如果T2为nil,我不想运行其余的代码,只返回nil。然而,测试T2导致以下错误:“类型名称后应有成员名称或构造函数调用”
处理这个问题的正确方法是什么?
谢谢
static func doHttpPost<T: Codable, T2: Codable>(data: T, method: String, for: T.Type) async throws -> T2?
{
/** working code */
if T2 != nil { <--- This is where the error is being thrown
/* Valid data was returned. Decode and return it */
let jsonObjects: T2 = try JSONDecoder().decode(T2.self, from: data)
return jsonObjects
}
return nil
}
我想要的最终结果是,如果发送了T2,则能够返回可选类型为T2的值,如果没有定义T2,则返回nil。
示例用法:
struct MyStruct : Codable {
var email: String = ""
init(email: String) {
self.email = email
}
}
var data = MyStruct(url urlString: String, email: 'some email')
/* if no data is expected back */
let _ = doHttpPost(url: "some url", data: data, for: MyStruct.self)
/* in case we need data back */
let ret: SomeJSONType = doHttpPost(url: "some url", data: data, for: MyStruct.self)
我尝试了Xcode提出的所有排列/建议,其中一个建议如下
/* this results in the warning "Comparing non-optional value of type 'any Any.Type' to 'nil' always returns true" */
if T2.self != nil {
}
我寻找的结果是使泛型返回类型成为可选的
1条答案
按热度按时间vmdwslir1#
当你写doHttpPost〈T:可编码,T2:Codable〉,这些T和T2不作为值存在,这些是你的TYPE。你需要在你的函数参数中声明它们。你还没有为你的T2声明任何值。你应该写一些像我写的函数,并且作为可选的,你需要在它前面添加一个“?”。你可以比较名称是数据的值,而不是T。
你写了这个:
这个T2没有定义,也没有要比较的名称。你需要先定义一个值,然后比较它。你可以像对T一样访问它们