这是我的代码:断点在。 videoObj.videoThumbnailUrl =
我设置了一个断点。 arrayOfVideos.append(videoObj)。在放置 (lldb) 的底部选项卡上。我输入:“po videoObj.videoThumbnailUrl”,同时在 .append 处有一个断点。 它返回了 url。但是当我将断点放在 videoObj.videoThumbnailUrl 上时。并输入:“po videoObj.videoThumbnailUrl”它返回空引号“” 我正在尝试使用代码段方法从 youtubev3api-playlist 接收数据。使用 value for key 方法提取数据。
我从中删除了 url。 “snippet.thumbnails.maxres”并尝试运行它,但出现此错误:无法将类型“__NSCFDictionary”(0x105c4eef0)的值转换为“NSString”(0x10603fb20)。
for video in JSON["items"] as! NSArray {
let videoObj = Video()
videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as! String
videoObj.videoTitle = video.valueForKeyPath("snippet.title") as! String
videoObj.videoDescription = video.valueForKeyPath("snippet.description") as! String
videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as! String
arrayOfVideos.append(videoObj)
}
最佳答案
不要使用强制转换或强制解包,因为如果它们遇到 nil 值,它们会导致您的应用程序崩溃。就像你的情况一样。而是使用 optional bindings和 optional chaining检测和处理 nil
值。
if let items = JSON["items"] as? NSArray {
for video in items {
let videoObj = Video()
videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as? String
videoObj.videoTitle = video.valueForKeyPath("snippet.title") as? String
videoObj.videoDescription = video.valueForKeyPath("snippet.description") as? String
videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as? String
arrayOfVideos.append(videoObj)
}
}
请注意,此代码不再使用强制转换,因此如果 Youtube API
不发送某些字段,那么我们将简单地使用 nil
这些值,而不是崩溃。
还有我们conditionally cast到 NSArray
并结合条件绑定(bind),我们只在项目实际上是一个数组时才对其进行循环。
关于Swift Alamofire - fatal error : unexpectedly found nil while unwrapping an Optional value - youtube api: PlaylistItems: list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34508963/