佚名通过本文主要向大家介绍了swift nil,nil,stringp nil,nil是什么意思,stringp nil错误等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: (swift)为什么 anyobject 不能回传nil 又是型态的问题
描述:
解决方案1:
描述:
哭哭 ,又是型态的问题
以下的 func 就是要让它 没有值的时候回传 nil 我就是要它回传nil 但,就是会报错,又不是NSMutabledictionary 或是 NSMutableArry 一定要有值,我已经指定是AnyObject (老师说 anyobject 是可以为 nil 的)
我该怎么让它回传nil呢
真心请教
func rtnChildArray(catno:Int) -> AnyObject {
var rtn:AnyObject!
for i in CateDictionary {
let tmpNSMutableArry = NSMutableArray();
if (i["catno"] as! NSString).integerValue == catno {
rtn = i["child"]
break
}
else {
if (i.objectForKey("child") as! NSMutableArray).count > 0 {
for j in (i.objectForKey("child") as! NSMutableArray) {
if (j["catno"] as! NSString).integerValue == catno {
print(j["child"])
rtn = j["child"]
break
}
}
}
}
}
return rtn
}
解决方案1:
thanks all~
解决方案2:func rtnChildArray(catno:Int) -> AnyObject? 加个问号
不忍心看你经常问,教程
此网站几乎是按照apple官网翻译来的,个人觉得还可以
如楼上所述,在后面加个问号就可以回传 nil 了。原因是这样的:在 swift 里默认都是不可空的,不管是 AnyObject 还是 Int 还是任何自定义的类型,都必须要有非 nil 的值。除非指定它为 optional 类型。
// 凡是没有带 ? 或者 ! 的类型声明,都是不可空的
var normalInt: Int = 0
// 类型后面带 ?,显示声明它是可空的
var aNilableInt: Int?
// 类型后面带 !,隐式声明可空,跟 ? 的区别是这里是自动解包的,需要用的时候就不必须进行解包了
var anotherNilableInt: Int!
之所以这么设计,是为了让语言更安全,或者说在编译期就发现更多潜在的问题,如果有潜在的错误,就很容易编译不通过(比如给一个不能为 nil 的参数传了一个有可能为 nil 的值,或者你这里的这个情况,在一个不能返回 nil 的函数里返回了一个可能为 nil 的值等)。