向平面图添加显式类型
Add explicit type to flatmap
取消注释以下代码块中的代码时出现以下错误。
Cannot infer return type for closure with multiple statements; add explicit type to disambiguate
但我想不出显式添加类型的语法。我该怎么做?
let path:String = path ?? Self.path
let publisher: AnyPublisher<[Self]?, Error> = NetworkableManager.getAll(path: path)
.flatMap {
// if path == "menus" {
// print("It's a menu")
// }
return StorableManager.shared.saveAll([=10=])
}
.merge(with: StorableManager.shared.fetchAll(predicate: filters))
.eraseToAnyPublisher()
您没有提供有关所涉及的 类 的全部信息,因此我模拟了一些内容来创建下面的 playground 示例。
我添加的位在 flatmap
运算符的闭包中。基本上,我告诉编译器使用片段 input -> Future<[String], Error>
闭包 return 的类型。为了想出那条线,我必须知道 StorageManager.shared.saveAll(items: input)
的 return 类型,所以我使用了我的模拟样本 returns.
的值
您的 return 值可能不同。
import Foundation
import Combine
class StorageManager {
static let shared = StorageManager()
init() {
}
func saveAll(items: [String]) -> Future<[String], Error> {
Future<[String], Error> { fulfill in
fulfill(.success(items))
}
}
}
struct NetworkManager {
static func getAll(path: String) -> Future<[String], Error> {
Future<[String], Error> { fulfill in
fulfill(.success(["Duck", "Cow", "Chicken"]))
}
}
}
let path : String = "some path"
let publisher : AnyPublisher<[String], Error> =
NetworkManager.getAll(path: path)
.flatMap { input -> Future<[String], Error> in
if path == "menus" {
print("It's a menu")
}
return StorageManager.shared.saveAll(items: input)
}
.eraseToAnyPublisher()
取消注释以下代码块中的代码时出现以下错误。
Cannot infer return type for closure with multiple statements; add explicit type to disambiguate
但我想不出显式添加类型的语法。我该怎么做?
let path:String = path ?? Self.path
let publisher: AnyPublisher<[Self]?, Error> = NetworkableManager.getAll(path: path)
.flatMap {
// if path == "menus" {
// print("It's a menu")
// }
return StorableManager.shared.saveAll([=10=])
}
.merge(with: StorableManager.shared.fetchAll(predicate: filters))
.eraseToAnyPublisher()
您没有提供有关所涉及的 类 的全部信息,因此我模拟了一些内容来创建下面的 playground 示例。
我添加的位在 flatmap
运算符的闭包中。基本上,我告诉编译器使用片段 input -> Future<[String], Error>
闭包 return 的类型。为了想出那条线,我必须知道 StorageManager.shared.saveAll(items: input)
的 return 类型,所以我使用了我的模拟样本 returns.
您的 return 值可能不同。
import Foundation
import Combine
class StorageManager {
static let shared = StorageManager()
init() {
}
func saveAll(items: [String]) -> Future<[String], Error> {
Future<[String], Error> { fulfill in
fulfill(.success(items))
}
}
}
struct NetworkManager {
static func getAll(path: String) -> Future<[String], Error> {
Future<[String], Error> { fulfill in
fulfill(.success(["Duck", "Cow", "Chicken"]))
}
}
}
let path : String = "some path"
let publisher : AnyPublisher<[String], Error> =
NetworkManager.getAll(path: path)
.flatMap { input -> Future<[String], Error> in
if path == "menus" {
print("It's a menu")
}
return StorageManager.shared.saveAll(items: input)
}
.eraseToAnyPublisher()