gpt4 book ai didi

swift - 实例方法 'drive' 要求类型 'NotificationItem' 和 '[NotificationItem]' 等效

转载 作者:行者123 更新时间:2023-12-02 17:59:19 24 4
gpt4 key购买 nike

我创建了一个名为通知 Item 的类,并解析模型类 RTVNotification 中的数据

导入基础导入RTV模型

公共(public)类NotificationItem:NSObject {

public var id: String
public var title: String
public var comment: String
public var publishStartDateString: String

init(id: String,
title: String,
comment: String,
publishStartDateString: String) {
self.id = id
self.title = title
self.comment = comment
self.publishStartDateString = publishStartDateString

super.init()
}

}

扩展通知项{ 静态函数实例化(带有通知:RTVNotification)->NotificationItem? {

    return NotificationItem(
id: notification.id,
title: notification.title,
comment: notification.comment,
publishStartDateString: notification.publishStartDateString)

}

}

View 模型

公共(public)类SettingsViewModel:ViewModel {

var item = [NotificationItem]()

public var fetchedNotifications: Driver<NotificationItem> = .empty()

public var apiErrorEvents: Driver<RTVAPIError> = .empty()

public var notificationCount: Driver<Int> = .empty()

public func bindNotificationEvents(with trigger: Driver<Void>) {

let webService: Driver<RTVInformationListWebService> = trigger
.map { RTVInformationListParameters() }
.webService()

let result = webService.request()
apiErrorEvents = Driver.merge(apiErrorEvents, result.error())
notificationCount = result.success().map {$0.informationList.maxCount }
fetchedNotifications =
result.success()
.map {$0.informationList.notifications}

-----> .map {NotificationItem.instantiate(with: $0)}

}

}

收到错误消息,指出无法将类型“[RTVNotification]”的值转换为预期参数类型“RTVNotification”我该怎么做才能解决这个问题。

最佳答案

您的问题在这里: fetchedNotifications: Driver<NotificationItem>应该是fetchedNotifications: Driver<[NotificationItem]>和线 .map {NotificationItem.instantiate(with: $0)}需要另一张 map 您正在处理Observable<Array<RTVNotification>> 。您在容器类型中拥有容器类型,因此您需要 map 中的 map :

.map { $0.map { NotificationItem.instantiate(with: $0) } }

当您的类型不匹配时,您需要更改类型。

代码的其他问题...

  • 驱动程序、可观察对象、主题和中继不应使用 var 定义。 ,它们应该始终是 let s。在调用绑定(bind)之前订阅您的属性的对象将连接到 .empty() observables 并且永远不会得到任何值。毕竟,这是函数式响应式(Reactive)编程。

  • 您的NotificationItem类型应该是 struct或者它的所有属性都应该是“let's”。

请务必阅读并理解@par对此问题的回答。他写了一个非常好的解释,浪费知识转移将是一种耻辱。

关于swift - 实例方法 'drive' 要求类型 'NotificationItem' 和 '[NotificationItem]' 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58654281/

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