ios - 使用 .map 将一个类的数组映射到另一个类的数组

标签 ios arrays swift dictionary

我是 Swift 的新手,正在尝试使用 .map。我的理解是该行为与 Javascript 的行为类似,但也许我没有正确掌握 Swift 语法?

我已经创建了自定义类 CustomItem 的公共(public)数组(它是响应中返回的类型的子类):

public var availableItems: [CustomItem] = []

public static func getAvailableItems(id: String, completion: (items: [CustomItem]) -> ()) -> Void {
    DataConnector.getRelated(type: "users", id: id, relationship: "available") { (response) -> Void in
        availableItems = (response.data?.map { return $0 as! CustomItem })!
        completion(items: availableItems)
    }
}

当我在收到响应后使用断点在控制台中执行 po response.data.map { return $0 } 时,我得到:

(lldb) po response.data.map { return $0 }
▿ Optional([<AnSDK.RemoteDataObject: 0x7f8a0b9c16b0>])
  ▿ Some : 1 elements
    ▿ [0] : < AnSDK.RemoteDataObject: 0x7f8a0b9c16b0>

所以看起来这部分确实有效,但是当我尝试将数据对象转换为 CustomItem 类时,我得到:

Could not cast value of type 'AnSDK.RemoteDataObject' (0x100abbda0) to 'Project.CustomItem' (0x100882c60).

这是我的 CustomItem 类以防万一:

import AnSDK

public class CustomItem: RemoteDataObject {
    var displayName: String = ""
    var value: Float = 0.0
    var owner: User?
}

如果我不使用 !强制沮丧,我得到:

RemoteDataObject is not convertible to CustomItem [...] 

... 在编译器中。

最佳答案

(我真的只是在这里重申 Ben Gottlieb 的回答,但希望更清楚一些,因为我相信有些读者对他的尝试感到困惑。)

信息看起来相当清楚。您收到了一组 AnSDK.RemoteDataObject。尽我所能从您的输出中看出,这是对象的实际类。您不能只说“它真的是 RDO 的这个子类”,除非它真的是那个子类。查看您的代码,这似乎不太可能。在 AnSDK 的某处,它必须构造一个 CustomItem,然后恰好将其作为 RemoteDataObject 返回。这似乎不是 getRelated 内部发生的事情。根据您的代码,我怀疑 AnSDKCustomItem 一无所知,那么它是如何构造一个的呢?

有很多方法可以解决这个问题,具体取决于类型的实际含义以及它们的交互方式。 Ben 的解决方案是一个,它基本上创建对象的副本(尽管在那种情况下,没有特别的理由让 CustomItem 成为 RDO 的子类,并且可能不应该不会。)

如果您只想向 RemoteDataObject 添加方法,您可以使用扩展来实现。您不需要创建子类。

关于ios - 使用 .map 将一个类的数组映射到另一个类的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888368/

相关文章:

ios - 如何从 NSData 对象获取 JSON 对象数组

java - 当对象是数组时将对象转换为字符串(java)

ios - 使用未声明的标识符 'FBRequestConnection'

ios - Quickblox 使用 QBRTCRemoteVideoView 填充完整视频

ios - iOS 中的应用组和 iCloud

javascript - OnClick 元素用 JS 填充数组

arrays - 为数组中的每个其他索引分配值

ios - Tableview Cell 无法正确显示

ios - MPMusicPlayerController.systemMusicPlayer setQueue 困难

ios - 在 Xcode 的顶部和底部发现黑色空间