swift - 为什么 anyobject 不能回传nil (又是型态的问题)

查看:103
本文介绍了swift - 为什么 anyobject 不能回传nil (又是型态的问题)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

哭哭 ,又是型态的问题

以下的 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

}

解决方案

如楼上所述,在后面加个问号就可以回传 nil 了。原因是这样的:在 swift 里默认都是不可空的,不管是 AnyObject 还是 Int 还是任何自定义的类型,都必须要有非 nil 的值。除非指定它为 optional 类型。

// 凡是没有带 ? 或者 ! 的类型声明,都是不可空的
var normalInt: Int = 0
// 类型后面带 ?,显示声明它是可空的
var aNilableInt: Int?
// 类型后面带 !,隐式声明可空,跟 ? 的区别是这里是自动解包的,需要用的时候就不必须进行解包了
var anotherNilableInt: Int!

之所以这么设计,是为了让语言更安全,或者说在编译期就发现更多潜在的问题,如果有潜在的错误,就很容易编译不通过(比如给一个不能为 nil 的参数传了一个有可能为 nil 的值,或者你这里的这个情况,在一个不能返回 nil 的函数里返回了一个可能为 nil 的值等)。

这篇关于swift - 为什么 anyobject 不能回传nil (又是型态的问题)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆