如何在swift 3中使用UIImage数组是否为零?

时间:2017-08-10 12:23:40

标签: ios swift swift3 uiimage

我有一个png图像数组。

iconeImage = [UIImage(named:"ion-home")!,UIImage(named:"ms-medkit")!,UIImage(named:"ion-edit")!,UIImage(named:"ion-clipboard")!,UIImage(named:"ion-clipboard")!,UIImage(named:"ion-waterdrop")!,UIImage(named:"ion-calendar")!]

我有一个用于table-view的函数,它使用这个数组元素设置图像

这是代码

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MenuTableViewCell") as! MenuTableViewCell
        cell.imgIcon.image = iconeImage[indexPath.row]
        return cell
    }

但是它给我一个iconeImage有零值的错误。所以你能给我建议解决方案吗?我是swift 3的初学者

这是截图 a busy cat ![两个muppets] [1]

4 个答案:

答案 0 :(得分:4)

不是将所有图像保存在内存中,而是建议您存储图像名称:

let iconImages = ["ion-home", "ms-medkit", "ion-edit", "ion-clipboard", "ion-waterdrop", "ion-calendar"]

并在需要时直接预加载每个图像。它不会影响性能,因为它是小图标。代码看起来也更清晰。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MenuTableViewCell") as! MenuTableViewCell
    cell.imgIcon.image = UIImage(named: iconImages[indexPath.row])
    return cell
}

仔细检查是否所有资产都已添加到您的项目中。如果他们在那里,应该显示图像。

尽量避免在代码中使用隐式解包的可选(!)。零值将使应用程序崩溃。在您的示例中,imageView.image是可选的,因此您可以将UIImage(名为:" imageName")设置为它。

此外,您可以尝试清理构建文件夹,清理项目并重新安装该应用程序。有时在Xcode中复制资源失败。

答案 1 :(得分:2)

请尝试以下格式

  let img = iconeImage[indexPath.row]
    if let imgData = img {
        cell.imgView.image = UIImage(data:imgData)
    }

答案 2 :(得分:2)

您可以改为存储图像名称:

let iconImageNames = ["ion-home","ms-medkit", ... , "ion-calendar")]

稍后在您的方法中访问它们:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "MenuTableViewCell") as! MenuTableViewCell
    let name = iconeImage[indexPath.row] ?? yourDefaultImageName
    cell.imgIcon.image = UIImage(named: name)
    return cell
}

作为一个例子

答案 3 :(得分:1)

我不知道究竟是什么问题。

但是当我搜索stackoverflow时。某处我读过Assets.xcassets的问题

然后我得到了this

的错误

然后在答案的帮助下解决错误。

希望我解决了这个错误。

同时问题在于资产文件夹。