无法分配价值:' self'是不可改变的

时间:2017-10-06 07:03:25

标签: swift initialization

我正在尝试从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 个答案:

答案 0 :(得分:3)

这是因为您的功能仅仅是功能,而不是初始化程序。

考虑以下示例:

class Request: NSMutableURLRequest {

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

}

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