我正在开发一个应用程序,我必须从网页上阅读。或者这是我的应用程序的解决方案。它正在从数据库中读取,但是在使用JSON时我有错误,所以我尝试了这个,因为我只需要读取一个数字。但是当我下载网页代码时,这只是" 3"例如,只是数字。在我的程序中它就像(NSString?),有没有可能在INT中转换它?
let url = NSURL(string: "http://servis.dronysitmp.cz/cteni.php")
if url != nil {
let task = URLSession.shared.dataTask(with: url! as URL, completionHandler: { (data, response, error) -> Void in
//print(data)
if error == nil {
let urlContent = NSString(data: data!, encoding: String.Encoding.ascii.rawValue) as NSString!
let urlContent2: Int = Int(urlContent)
print(urlContent!)
}
}
task.resume()
}
答案 0 :(得分:1)
Josef,你没有正确使用普通的Swift模式。而不是
let url = ...
if url != nil { ...
使用此模式可以提高易读性:
if let url = ... {
在这种情况下,url
是非可选的,不能是nil
。这个结构在Swift中称为“safe-unwrapping an optional”。
下一部分看起来不太好的代码是:
let urlContent = NSString(data: data!, encoding: String.Encoding.ascii.rawValue) as NSString!
如果使用NSString
构造函数,则无需将其强制转换为NSString。你可能想要实现的是绕过NSString(data:encoding:)
返回一个可选项的事实 - 它有充分的理由,因为它不能保证永远成功。因此,你应该做这样的事情:
if let urlContent = NSString(data: data!, encoding: String.Encoding.ascii.rawValue) {
确保在NSString
无法将提供的data
转换为整数时,在这种情况下不会发生崩溃。
最后,请考虑以下两个一般性建议:
nil
的情况下,切勿使用强制解包可选项。 I. e。永远不要这样做:variable!
如果你不能100%确定variable
是非零的。因此,您示例中的NSString(data: data!,...
并不好。if let urlContent = String(data: data!, encoding: String.Encoding.ascii.rawValue) {
。这使得你的代码“更快”,这是Swift程序员更喜欢的......