【发布时间】:2015-04-27 02:13:39
【问题描述】:
我有一个测试类,它试图通过NSURLConnection 访问谷歌。如果我尝试使其通用,则永远不会调用 NSURLConnectionDataDelegate 方法。
class Remote<T: NSObject>: NSObject, NSURLConnectionDelegate, NSURLConnectionDataDelegate {
//class Remote: NSObject, NSURLConnectionDelegate, NSURLConnectionDataDelegate {
var data = NSMutableData()
func connect(query:NSString) {
var url = NSURL(string:"http://www.google.com")!
var request = NSURLRequest(URL: url)
var conn = NSURLConnection(request: request, delegate: self, startImmediately: true)
}
func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
LF.log("didReceiveResponse")
}
func connection(connection: NSURLConnection!, didReceiveData conData: NSData!) {
LF.log("didReceiveData")
self.data.appendData(conData)
}
func connectionDidFinishLoading(connection: NSURLConnection!) {
LF.log("didFinished")
//println(self.data)
}
deinit {
println("deiniting")
}
}
测试它(注释/取消注释要比较的第一/第二行):
let remote = Remote<NSObject>()
//let remote = Remote()
remote.connect("")
有什么想法吗?
Update1:回答评论 1,它是一个 REST 客户端,为您处理网络连接和解析。我稍后会写一篇关于此的博客(因为它仍在开发中),但为了让您了解这里是我项目中的一些演示代码:
let client = ICRestClient<ICCategoryModel>(api:IC.api.category_list)
client.func_array = {
(results: [ICCategoryModel]?, error: NSError?) -> Void in
block!(results, error)
}
client.execute()
而 ICCategoryModel 是这样的:
class ICSubCategoryModel: ICModel {
var name: String?
var category_id: Int = 0
}
这个想法是你传入 API URL,你会得到一个包含一些反射对象的数组(或错误)而不是字典。它来自我的 LSwift 库,支持各种身份验证方法(内置参数、cookie、标头、身份验证挑战等)
【问题讨论】:
-
你创建一个泛型类的目的是什么?你想用这种方法解决什么问题?
-
我添加了带有演示的 update1。它比 CoreData 更容易使用——主要思想是,在现实世界中,大多数情况下我们只需要 JSON、Parse 等简单的技术,而 XML、AWS 等解决方案过于复杂。然而,为了构建简单的解决方案,有时我们需要编写一些不常见的代码。顺便说一句,
swift比objc灵活得多,但我只是喜欢swift的语法。