带有枚举作为标识符的Swift字典无法在完成块中自动完成

时间:2018-08-23 13:36:33

标签: swift xcode swift4

我有一个返回完成的函数。该补全具有一个自定义类,该自定义类具有一个使用枚举作为标识符的字典。

我面临的问题是Xcode无法识别变量的类型,并且当我在完成代码块中使用它时不会自动完成。

我的代码看起来像这样

功能

func testFunc (completion:(PrxServiceResponseCallback) ->()){
    let responseCallback = PrxServiceResponseCallback()
    completion(responseCallback)
}

班级

class PrxServiceResponseCallback:NSObject{

    var success = false
    var resultCode:Int32 = 0

    var response:[PrxResponseAttributes:Any] = [PrxResponseAttributes:Any]()

}

enum PrxResponseAttributes{

    case sourceProtocolInfoArray
    case sinkProtocolInfoArray
    case connectionIDsArray
    case connectionInfo

}

调用函数

testFunc { (testResonse) in
    testResonse.response[.]//Not Auto completing
}

制作带有枚举数作为标识符的字典的整个想法是为了简化字典返回的属性,但是,如果我无法自动完成,那么这个想法将变得毫无意义。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

Xcode不给您自动完成功能并不意味着您的代码无法编译。这只是意味着Xcode太愚蠢而无法解决问题。我以前曾多次遇到过这种情况。它似乎总是在闭包内部发生。

您可以忽略没有自动完成的事实,然后自己输入案例名称:

testResonse.response[.sourceProtocolInfoArray]

它将编译。

您也可以考虑创建一个结构,而不是将值存储在字典中。这是一个示例结构(我猜了类型):

struct Response {
    let sourceProtocolInfo: [String]
    let sinkProtocolInfo: [String]
    let connectionIDs: [Int]
    let connectionInfo: String
}

答案 1 :(得分:1)

如果您使用var response:[UIColor:Any] = [UIColor:Any]() 它仍然没有提供自动完成功能,因此这不是您的问题,您无法对此做很多事情。

如果您需要自动完成功能,请将PrxResponseAttributes与结合使用。 (点)

您可以做到

testResonse.response[PrxResponseAttributes.sourceProtocolInfoArray]

编辑

注意:只有在PrxServiceResponseCallback类中添加一个属性(如

)时,这种情况才会在实现闭包的情况下发生
 var anyValue:Any? {
    return response[.connectionInfo] // it is showing completion 
}