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

陳尹
  • 348

哭哭 ,又是型态的问题

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

}
回复
阅读 3.2k
3 个回答
✓ 已被采纳

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

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

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

jing_cai
  • 919

func rtnChildArray(catno:Int) -> AnyObject? 加个问号
不忍心看你经常问,教程
此网站几乎是按照apple官网翻译来的,个人觉得还可以

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏