i具有以下功能
func refreshFeedItems(completion: @escaping ActivityFeedCompletion) {
let currentTab = feedTab
//Result<([FeedItem], Bool)>) -> Void
// Load the cache in and start the spinner for the network request we're about to make
completion(.success(cache[currentTab], true))
ActivityFeedService.sharedInstance.refreshCommunityFeed(tab: currentTab) { result in
// A quick user might switch tabs before this
// call completes since we call completion twice
guard currentTab == self.feedTab else {
return
}
switch result {
case .failure(let error):
Log.warn(error)
completion(.failure(error))
case .success(let items):
self.cache[self.feedTab] = items
let tuple = Result.success(items,true) as ActivityFeedCompletion
completion((tuple,false))
}
}
}
但是这条线
completion(.success(cache[currentTab], true))
和这个
let tuple = Result.success(items,true) as ActivityFeedCompletion
两者都为我扔了一个"呼叫中的额外参数"错误。
这是我的ACTICVITY完成Typealias
typealias ActivityFeedCompletion = (Result<([FeedItem], Bool)>) -> Void
我不确定为什么会遇到这个错误,我认为这是误导性的,但我毫无头脑来解决问题。
第二个错误很明显(桥梁铸件很可能是冗余)
let tuple = Result.success(items,true) // as ActivityFeedCompletion
已经表示结果,因此您必须写
completion(tuple)
第一个错误可能是类似的,目前尚不清楚什么是
您隐藏了代码的许多相关部分,因此我需要猜测许多部分。如果我的答案远非您的期望,那么您应该更好地更新问题并显示代码的相关部分。例如,您的ActivityFeedCache
的整个定义。
带有此定义:
typealias ActivityFeedCompletion = (Result<([FeedItem], Bool)>) -> Void
您ActivityFeedCompletion
的Result
的成功案例采用单元组类型([FeedItem], Bool)
的参数。
在此行中:
completion(.success(cache[currentTab], true))
您正在将两个参数传递给success
,因此消息已经足够清楚了。您需要通过单参数。
completion(.success((cache[currentTab], true)))
和后一部分:
let tuple = Result.success(items,true) as ActivityFeedCompletion
completion((tuple,false))
您完全误解了类型。Result
不能转换为ActivityFeedCompletion
,并且您不能将RAW元组(tuple,false)
传递给cache
0,该completion
服用Result<([FeedItem], Bool)>
。
请尝试这样的事情:
completion(.success((items, true/* or false, which you want to pass? */)))