【问题标题】:Check If Custom Class Not Nil --- Swift Is Converting It To A UInt8检查自定义类是否不为零 --- Swift 将其转换为 UInt8
【发布时间】:2014-12-07 10:58:01
【问题描述】:

我有一个自定义图像类,我只是想检查它是否不为零。

我尝试的每一种语法(以上是我的最佳猜测)总是说我的 iImage 不是 UInt8。

首先:为什么它首先将它的 UInt8 与 nil 进行比较?

第二:如何检查我的自定义类是否为 nil?

更新:

答案很受欢迎,但没有用。这是完整的代码块

private class func doubleLayoutView(mainView:UIView,images:Array<iImage>)
    {
        for i in 0...1{

            var image:iImage = images[i]
            if image.uiImage!=nil
            {
                image.imageFrame = CGRectMake(CGFloat(i)*mainView.frame.width/2, 0, mainView.frame.width/2, mainView.frame.height)
            }
        }
    }

【问题讨论】:

  • 由于错误似乎没有意义,我认为这是关于尝试将非可选与nil 进行比较。你能告诉我们uiImage的定义吗?

标签: xcode swift boolean null boolean-expression


【解决方案1】:

您已将 uiImage 声明为非可选:

var img: UIImage = UIImage()

由于它是非可选的,它不能是nil - 我建议你阅读Optionals

有趣的是,该错误具有误导性,因为您使用了括号。此代码 sn -p 产生相同的错误:

class MyImage {
    var img: UIImage = UIImage()
}

var x = MyImage()

if (x.img != nil) {

}

如果省略括号:

if x.img != nil {

}

错误是:

不能使用类型为“(@lvalue UIImage, NilLiteralConvertible)”的参数列表调用 !=

这更有意义。

我认为不同的行为是因为在第一种情况下(带括号),表达式被评估为元组而不是逻辑表达式。

由于if语句中的括号不是必需的,因此建议您不要使用它们。

【讨论】:

  • 我试过了,但没有用,我用完整的代码块更新了我的问题
  • 这里:var image:iImage = images[i] 您明确指出 image 不是可选的,因此它不能为 nil,因此您无法检查它是否不同于 nil .另外,图片是从数组中提取的,数组中不能包含nils。所以删除if 应该可以解决您的问题。如果您认为应该根据您的应用程序逻辑需要 if,那么您的代码中的其他地方存在设计错误
【解决方案2】:

我有一个自定义图像类,我只是想检查它是否不为零

确保iamge.uiImage 是可选的。否则不能和nil比较

在这种情况下,Swift 可以帮助您避免额外的验证 != nil

另一方面,如果uiImage 不是可选的(即没有? 标记)意味着此值不是nil,您可以删除if 验证语句,因为它没有意义

如何检查我的自定义类是否为 nil?

如果您对自定义类不是 nil 很有信心 - 不要检查它。 如果它可能是nil - 将其定义为可选,如:

var uiImage:UIImage?

这种情况下每次使用时都需要解包1st

【讨论】:

  • 这不是可选的,我更新了我的示例,如您所见,我将它从数组中取出
  • @Aggressor 如果是,删除if,你不需要它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 2014-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多