gpt4 book ai didi

ios - 通用功能在同一环境中表现不同

转载 作者:行者123 更新时间:2023-11-28 16:03:20 26 4
gpt4 key购买 nike

注意:类似的问题涉及 SDK 通用函数。这是关于自写泛型函数的。

我有这个通用函数

extension Array {

func findObject<T: Identifiable>(withID objectID: Int) -> (index: Int, object: T)? {
for (index, object) in self.enumerated() {
if let identifiableObject = object as? T {
if identifiableObject.id == objectID {
return (index, identifiableObject)
}
}
}

return nil
}
}

Identifiable 协议(protocol)仅要求对象具有参数 id ({get set})。在代码中我有这个函数的几个用法,看起来都像这样

typealias ObjectInfo = (index: Int, object: SomeObject)

func deleteSomething(withID someID: Int) {
guard let objectInfo: ObjectInfo = someArray.findObject(withID: someID) else {
return
}

// some code
...
}

此代码可以编译并正常工作。

但是当我尝试为扩展编写单元测试并尝试在测试中使用它时,问题出现了。这是测试片段:

@testable import WhatEverTarget

typealias ObjectInfo = (index: Int, object: IdentifiableMock)
...
var array: [IdentifiableMock]!
...
let targetID = 4
let objectInfo: ObjectInfo = array.findObject(withID: targetID)

IdentifiableMock 只是一个简单的类,只有 id 而已。这个测试片段不会编译,给我错误(在最后一行):

“没有“findObject”候选项产生预期的上下文结果类型‘ObjectInfo(又名‘(index: Int, object: IdentifiableObject)’)’”

请帮我找出这种不一致的原因。

最佳答案

正如 Paulw11 在评论中所建议的,我需要添加可选性(?)。这有帮助。非常感谢。

一如既往,只是一个简单的细节,忘记了,“破坏”了代码。我想,我错过它的原因是因为在工作代码中没有可选性,但自 guard-statement 以来它不是必需的。

关于ios - 通用功能在同一环境中表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40673193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com