Nil 同时展开一个实际具有值的可选
Posted
技术标签:
【中文标题】Nil 同时展开一个实际具有值的可选【英文标题】:Nil while unwrapping an optional that actually has a value 【发布时间】:2018-08-03 19:33:06 【问题描述】:我在打开一个可选项时遇到了一个非常奇怪的错误。当我打印该值时,我实际上可以看到它,但是它崩溃并显示:
致命错误:在展开可选值时意外发现 nil
这是代码(fetchPost()
在viewDidLoad()
中被调用:
func fetchPost()
Api.Posts.observePostIncludingImages(withId: postId) (post, photosStringArray) in
self.isLiked(postId: post.id!, completion: boolValue in
Api.Posts.fetchCount(postId: post.id!, completion: totalCount in
post.isLiked = boolValue
self.photosArrayString = photosStringArray
print(photosStringArray) // prints the actual image string
self.setScrollView()
)
)
func setScrollView()
for i in stride(from: 0, to: photosArrayString.count, by: 1)
var frame = CGRect.zero
frame.origin.x = self.galleryScrollView.frame.size.width * CGFloat(i)
frame.origin.y = 0
frame.size = self.galleryScrollView.frame.size
galleryScrollView.isPagingEnabled = true
let newUIImageView = UIImageView()
print(photosArrayString[i]) // Prints the value again
let myImage = UIImage(named: photosArrayString[i])! // CRASHES! i = 0 (first item in the array)
avgBackgroundColorsOfImage.append(myImage.averageColor!)
newUIImageView.image = myImage
newUIImageView.frame = frame
newUIImageView.contentMode = UIViewContentMode.scaleAspectFit
newUIImageView.sd_setImage(with: URL(string: self.photosArrayString[i]), completed: nil)
galleryScrollView.backgroundColor = avgBackgroundColorsOfImage[i]
galleryScrollView.addSubview(newUIImageView)
self.galleryScrollView.contentSize = CGSize(width: self.galleryScrollView.frame.size.width * CGFloat(photosArrayString.count),
height: self.galleryScrollView.frame.size.height)
pageControl.addTarget(self, action: #selector(changePage), for: UIControlEvents.valueChanged)
【问题讨论】:
【参考方案1】:您要解包的是您刚刚创建的可选UIImage
。数组中保存的任何字符串都是有效字符串。但是,它不是资产目录中有效图像的名称。请注意,错误是关于“解包 nil 值”,而不是“数组越界” - 这些是不同的东西。
docs on this initializer 显示了它是如何作为一个可选的 init 函数返回“指定文件的图像对象,如果方法找不到指定的图像,则返回 nil。”
【讨论】:
这解释了很多。谢谢 可以,但是有一个等待时间,现在说 2 分钟。我会接受的:)以上是关于Nil 同时展开一个实际具有值的可选的主要内容,如果未能解决你的问题,请参考以下文章
UIControl子类-意外地找到nil,同时隐式展开一个可选值