Swift中的重命名问题
我第一次使用Swift进行编程,在这样做的过程中,我遵循了教程。不幸的是,教程看起来有点过时,而且大部分代码都会抛出构建时错误。最常发生的错误是Swift中的重命名问题,swift,xcode,Swift,Xcode,我第一次使用Swift进行编程,在这样做的过程中,我遵循了教程。不幸的是,教程看起来有点过时,而且大部分代码都会抛出构建时错误。最常发生的错误是NSURLSession已重命名为URLSession。我试着让Swift修复它,但在很多情况下它只是开始抛出警告。我还得到了一个值类型HomeModel没有成员'parseJSON'错误以及NSDat不能隐式转换为数据的错误。据我所知,NSURL似乎不再使用,但我不确定其他两个。鉴于这是我参与的第一个Swift项目,我不确定如何修复这些问题。有人能提供
NSURLSession已重命名为URLSession
。我试着让Swift修复它,但在很多情况下它只是开始抛出警告。我还得到了一个值类型HomeModel没有成员'parseJSON'
错误以及NSDat不能隐式转换为数据的错误。据我所知,NSURL似乎不再使用,但我不确定其他两个。鉴于这是我参与的第一个Swift项目,我不确定如何修复这些问题。有人能提供一些关于如何纠正这些错误的见解吗
代码如下:
import Foundation
protocol HomeModelProtocal: class {
func itemsDownloaded(items: NSArray)
}
class HomeModel: NSObject, NSURLSessionDataDelegate {
//properties
weak var delegate: HomeModelProtocal!
var data : NSMutableData = NSMutableData()
let urlPath: String = "http://testurl.com/service.php" //this will be changed to the path where service.php lives
func downloadItems() {
let url: NSURL = NSURL(string: urlPath)!
var session: NSURLSession!
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
let task = session.dataTaskWithURL(url)
task.resume()
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
self.data.appendData(data);
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
if error != nil {
print("Failed to download data")
}else {
print("Data downloaded")
self.parseJSON()
}
}
}
一些基本类型在Swift 3.0中删除了“NS”前缀。在swift 2.2的早期,我们曾经有NSUserDefaults
,NSURLSession
,NSFileManager
等。现在,他们中的大多数人放弃了前缀“NS”,改为UserDefaults
,URLSession
,FileManager
等
您的代码包含许多前缀为“NS”的类型。只需删除它,您的代码就可以转换为Swift 3。转换后的代码如下所示:
protocol HomeModelProtocal: class {
func itemsDownloaded(items: NSArray)
}
class HomeModel: NSObject, URLSessionDataDelegate {
//properties
weak var delegate: HomeModelProtocal!
var data : Data = Data()
let urlPath: String = "http://testurl.com/service.php" //this will be changed to the path where service.php lives
func downloadItems() {
let url: URL = URL(string: urlPath)!
var session: URLSession!
let configuration = URLSessionConfiguration.default
session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
let task = session.dataTask(with: url)
task.resume()
}
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
self.data.append(data);
}
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
if error != nil {
print("Failed to download data")
}else {
print("Data downloaded")
self.parseJSON() // This class doesn't have a function parseJSON(). So, it's giving you an error like this
}
}
}
另外,我在您的类中没有看到任何名为parseJSON()
的函数。我相信你必须加上它