从 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的主要内容,如果未能解决你的问题,请参考以下文章
从 CoreData 获取数据时出现“'[AnyObject]' 不可转换为 '[Dog]?'”错误
从 'Result<AnyObject>' 转换为不相关类型 'NSArray' 总是失败