从 AnyObject 向下转换为 UIImage[] - Swift

Posted

技术标签:

【中文标题】从 AnyObject 向下转换为 UIImage[] - Swift【英文标题】:Downcast from AnyObject to UIImage[] - Swift 【发布时间】:2014-06-22 21:19:06 【问题描述】:

我正在尝试将 valueForKeyPath 的结果转换为 UIImages 数组。当尝试这样做时,我遇到了这个错误

架构 i386 的未定义符号: “TToFC9TableView19TableViewControllers6photosGSqGSaCSo7UIImage”,引用自: __TFC9TableView29JustPostedTableViewController11fetchPhotosfS0_FT_T_ 在 JustPostedTableViewController.o ld:未找到体系结构 i386 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

这是我对 swift 代码的尝试: propertyListResults是NSDictionary,valueForKeyPath中的参数是String

var photos : AnyObject = (propertyListResults as AnyObject).valueForKeyPath(flickrFetcher.FLICKR_RESULTS_PHOTOS)

self.photos = photos as? UIImage[]

代码的工作 Objective-C 版本是

NSArray *photos = [propertyListResults valueForKeyPath:FLICKR_RESULTS_PHOTOS];
self.photos = photos

【问题讨论】:

不是结构类型的数组,因此是Any 而不是AnyObject? => 你可能需要在 Swift 中使用 NSArray @ChristianDietrich,在尝试将其分配给 AnyObject 时,swift 会自动将其转换为 NSArray。 It does that will all basic value types @ChristianDietrich 我把它改成了Any 它给出了这个错误Command /Applications/Xcode6Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift failed with exit code 254 【参考方案1】:

如果你在 "__TToFC9TableView19TableViewControllers6photosGSqGSaCSo7UIImage__" 上运行 swift-demangle,你会得到:

@objc TableView.TableViewController.photos.setter : (ObjectiveC.UIImage[])?

这意味着链接器没有为 TableViewController 上的照片找到设置器。您似乎使用的是 TableViewController 而不是您自己的具有photos 属性的子类。

另外,photos as? UIImage[] 返回一个 Optional 因为它可能会失败。您应该执行以下操作:

if let images : [UIImage] = photos as? [UIImage] 
    self.photos = images

这会检查photos 是否可以转换为[UIImage]。如果可以,它会将其分配给self.photos

编辑:将 UIImage 数组语法更新为 beta 3 中的新数组语法

【讨论】:

我试过了,还是出现同样的错误,这是 Xcode 显示给我的完整日志pastebin.com/Qx8piqNC 谢谢@drewag,我现在没有收到任何错误,但它似乎不允许我将照片转换为照片,因为它们没有填充阵列。去看看我的代码,看看我哪里出错了 让它工作了@Drewag 我设法让它工作了一个细节。我在这行代码cell.detailTextLabel.text = photo.valueForKeyPath(flickerFetcher.FLICKR_PHOTO_DESCRIPTION) as String 上得到了一个EXC_BAD_INSTRUCTION,控制台告诉我它无法打开 Optional.None 上面的行,cell.textLabel.text = photo.valueForKeyPath(flickerFetcher.FLICKR_PHOTO_TITLE) as String 成功运行 想通了。当我试图找出最初的问题时,我将表格单元格改回了基本类型。现在一切正常。感谢您的帮助

以上是关于从 AnyObject 向下转换为 UIImage[] - Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何正确检查是不是成功向下转换为 AnyObject?

从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误

从 'Result<AnyObject>' 转换为不相关类型 'NSArray' 总是失败

无法转换任何类型?要键入 AnyObject?从 swift 3 转换为 swift 4 时

从 cvMat 转换为 UIImage 会改变图像

Swift 中的错误:(键:AnyObject,值:AnyObject)' 不能转换为 'NSDictionary'