代码之家  ›  专栏  ›  技术社区  ›  sudoExclamationExclamation

Swift-如何正确地将NSMutableURLRequest子类化?

  •  0
  • sudoExclamationExclamation  · 技术社区  · 7 年前

    我有如下子类NSMutableURLRequest:

    class CustomNSMutableURLRequest: NSMutableURLRequest {
    
        convenience init(url : URL) {
            self.init(url: url)
            self.httpShouldHandleCookies = false
            self.httpMethod = "GET"
            print("Custom Request!")
    
        }
    }
    

    这会在最短的时间内产生一个无限循环 self.init(url: url) 线使用 super 而不是 self 也不管用。我该怎么解决这个问题?

    0 回复  |  直到 7 年前
        1
  •  3
  •   dgatwood    7 年前

    根据我的经验,您不能安全地将NSURLRequest子类化。如果你这样做了,你将在NSURLSession中得到令人着迷的错误行为,其中一个请求的响应与不同的请求错误地关联。

    找到另一种方法,例如使用为NSURLProtocol设计的方法将任意字符串附加到请求,并附加包含UUID的字符串,然后将其用作字典密钥。或者将会话标识符与每任务标识符结合使用。不管怎样。

        2
  •  2
  •   OOPer    7 年前

    不幸的是,您不能在子类中重写确切的便利初始值设定项。

    你可能需要这样写:

    class CustomNSMutableURLRequest: NSMutableURLRequest {
    
        convenience init(url : URL) {
            self.init(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 60)
            self.httpShouldHandleCookies = false
            self.httpMethod = "GET"
            print("Custom Request!")
        }
    }
    

    但我不确定是否真的需要子类化,我会添加一些工厂方法 URLRequest 这样地:

    extension URLRequest {
    
        public static func customRequest(url: URL) -> URLRequest {
            var result = URLRequest(url: url)
            result.httpShouldHandleCookies = false
            result.httpMethod = "GET"
            print("Custom Request!")
            return result
        }
    }
    
    推荐文章