我有简单的方法(希望语法正确)
func foo() -> WmGroupItemSample?{
var sample:WmGroupItemSample?
if(a > 0){ // some condition
sample = mGroupItemSampleList[0]
}
else{
// do nothing
}
return sample
}
据我所知,foo
方法可能会返回nil,如果语句a>0
没有发生。因此,返回类型为:WmGroupItemSample?
。
我对这种方法称之为怀疑:
var sample:WmGroupItemSample? = foo()
if let temp = sample{
return sample.getStartDate()
}
else{
return -1
}
这是验证的正确方法,如果不是nil 吗?我使用Beta 6
如果我在没有?
或!
的情况下拨打电话会有什么不同:
var sample:WmGroupItemSample = foo()
或:
var sample:WmGroupItemSample! = foo()
为什么我无法验证sample
:
if sample == nil {
/* do one*/
}
else {
}
答案 0 :(得分:8)
要将值与nil进行比较,必须允许其为?
标记为零。这意味着该值可以(可能)为nil
。所以默认情况下:
var a : String
不能是零。要允许字符串为零,您必须这样做:
var a : String?
使用!
调用变量会解包一个可选值
"尝试使用!访问不存在的可选值会触发a 运行时错误。始终确保可选项包含非零值 使用前的价值!强行解开它的价值。"摘录自:Apple Inc." Swift编程语言。"
的iBooks。 https://itun.es/pl/jEUH0.l
有关更多信息,我建议:
读数。此外SO question with answer可能会有所帮助。
答案 1 :(得分:2)
您可能必须实现Equatable或Comparable协议。 使用全局函数实现Equatable协议
func ==<T>(lhs:T, rhs: T?)-> Bool{
return lhs == nil
}
//在您的类中,您现在可以在类定义中扩展Equatable协议。即
class ClassName: Equatable{
// properties and functions
}