提问者:小点点

无法赋值:“self”是不可变的


我正在尝试从NSMutableURLRequest子类中的自定义init返回一个实例:

class Request: NSMutableURLRequest {

     func initWith(endPoint:String, methodType:RequestType, body:RequestBody,headers: [String:String]?) {
        self = NSMutableURLRequest.init(url: URL.init(string: endPoint, relativeTo: URL?))
       //return request

    }
}

但是编译器不允许做同样的事情,我收到错误“无法分配给值:'self'是不可变的”。什么是正确的方法,为什么编译器在这里返回错误。


共1个答案

匿名用户

这是因为您的函数只是一个函数,而不是初始化程序。

考虑以下示例:

class Request: NSMutableURLRequest {

    convenience init (endPoint:String, methodType:RequestType, body:RequestBody,headers: [String:String]?) {
        self.init(url: URL(string: endPoint)!)
    }

}

在这里,我们声明了便利初始化器,它通过调用指定的初始化器返回一个新对象。您不必分配任何东西,因为init是在对象的构造(创建)时调用的。