Swift 无法调用类型为';int';具有类型为';NSString?&x27;

Swift 无法调用类型为';int';具有类型为';NSString?&x27;,swift,Swift,我正在开发一个应用程序,我必须从网页上阅读。或者这就是我的应用程序解决方案。它是从数据库读取的,但我在使用JSON时出错,所以我尝试了这个方法,因为我只能读取一个数字。但是当我下载网页代码时,例如只有“3”,只是数字。在我的程序中,它类似于(NSString?),是否有可能将其转换为INT let url = NSURL(string: "http://servis.dronysitmp.cz/cteni.php") if url != nil { let task

我正在开发一个应用程序,我必须从网页上阅读。或者这就是我的应用程序解决方案。它是从数据库读取的,但我在使用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()
    }

约瑟夫,你没有正确使用普通的Swift模式。而不是

let url = ...
if url != nil { ...
使用此模式可以提高易读性:

if let url = ... {
在这种情况下,
url
是非可选的,不能为
nil
。在Swift中,这种构造称为“安全展开可选对象”

代码的下一个不太好看的部分是:

let urlContent = NSString(data: data!, encoding: String.Encoding.ascii.rawValue) as NSString!
如果使用
NSString
构造函数,则无需将其强制转换为NSString。您可能试图实现的是绕过以下事实:
NSString(数据:encoding:)
返回一个可选值,这是有充分理由的,因为它不能保证总是成功的。因此,您更应该这样做:

if let urlContent = NSString(data: data!, encoding: String.Encoding.ascii.rawValue) {
这确保在
NSString
无法将提供的
数据转换为整数的情况下不会发生崩溃

最后,请考虑这两个一般性建议:

  • 在未事先测试
    nil
    的情况下,切勿强行展开选装件。即。永远不要这样做:
    变量如果不能100%确定
    变量
    为非零。因此,在您的示例中,
    NSString(data:data!,…
    不是很好
  • 如果纯SWIFT替代品存在,请尽量避免基础类(NS类,例如NSString)。在示例中:如果代码允许URLCyt=字符串(Data:Data;Detrial.Strord.Acsii.RWAv值){< /code >。这会使代码“SWIFT”成为SWIFT编码器更喜欢的…

  • 是的。在SO或Google中查找“String to Int in Swift”?使用
    Int(“3”)
    将字符串数字表示转换为
    Int
    @Larme是的,我尝试了以下方法:让myInt:Int=Int(myString)……但我有错误,我不能从“nSnc++”到“in”为什么是NSCORT?您是如何序列化JSON的?我想知道您是否没有混合SWIFT 3类型和旧ObjuleC基金会(NStEs)。。那么,请删除您的问题中谈论JSON的部分,因为这令人困惑。当项目符号1正确地指出您应该避免强制展开选项时,为什么在项目符号2中强制展开
    数据
    ?您是对的。我只是从原始问题中复制了这部分代码,并将其取消ged.我会在我的回答中添加评论。