swift 测试可选的通用返回类型返回错误[已关闭]

kknvjkwl  于 2023-03-28  发布在  Swift
关注(0)|答案(1)|浏览(129)

已关闭。此问题需要超过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 {
}

我寻找的结果是使泛型返回类型成为可选的

vmdwslir

vmdwslir1#

当你写doHttpPost〈T:可编码,T2:Codable〉,这些T和T2不作为值存在,这些是你的TYPE。你需要在你的函数参数中声明它们。你还没有为你的T2声明任何值。你应该写一些像我写的函数,并且作为可选的,你需要在它前面添加一个“?”。你可以比较名称是数据的值,而不是T。
你写了这个:

if T2 != nil {

这个T2没有定义,也没有要比较的名称。你需要先定义一个值,然后比较它。你可以像对T一样访问它们

static func doHttpPost<T: Codable, T2: Codable>(data: T?, data2:T2?, method: String, for: T.Type) async throws -> T2?
{         
     if  data2 != nil {
         
      // Do something
     }

     if  data1 != nil {

       // Do something
     }

     return nil
}

相关问题