【问题标题】:urlNode.objectForKeyedSubscript("href") as? String - Swift 2.3 / Swift 3 errorurlNode.objectForKeyedSubscript("href") as?字符串 - Swift 2.3 / Swift 3 错误
【发布时间】:2016-11-11 15:23:16
【问题描述】:

我的代码爬取 HTML 页面,搜索标签,读取网站上的表格并填充 tableView。这在 Swift 2.2 中就像一个魅力,但自从我更新了 Cocoapods,我遇到了这个拒绝去的错误。

这是我的功能:

if let secondColumn = rowElement.childAtIndex(1) as? HTMLElement {
        title = secondColumn.textContent
            .stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
            .stringByReplacingOccurrencesOfString("\n", withString: "")
        if let urlNode = secondColumn.firstNodeMatchingSelector("a") {
        if let urlString = urlNode.objectForKeyedSubscript("href") as? String {
            url = NSURL(string: urlString)
            if url == nil {
                url = NSURL.init(string: "www.mywebsitelink.com")
            }
            }
        }
    }

错误在:urlNode.objectForKeyedSubscript("href") as? String

错误:

来自“字符串?”的向下转换to 'String' 只解开选项;你是否 是用'!'的意思吗?

这之前运行良好,我根本没有更改此文件中的任何代码。

依赖:

目前采取的步骤:

  • 将代码更新到 Swift 2.3 和 Swift 3 - 不起作用。
  • 清理代码、删除派生数据等 - 不起作用。
  • 尝试将依赖项的版本转换为旧版本 - 不起作用。
  • 尝试更改可选值,即添加/删除“!”或 '?',试图通过删除 'if let' 并声明它来更改函数。

变化图片:

错误:条件绑定必须具有可选类型,而不是字符串。

错误:无法编写脚本

请帮忙。

【问题讨论】:

  • @sasquatch - 不确定你的帖子在哪里消失了。我们正在做一些事情......
  • 我删除了它,因为它不是正确的答案
  • 哦好吧..仍然停留在这个:(..我试过你之前(甚至现在)所说的一切,不确定问题出在哪里。
  • 我离开了我的系统,如果我得到一个工作代码,我会把它作为答案发布。
  • 谢谢。会留意你的答案。

标签: ios swift xcode scripting alamofire


【解决方案1】:

使用以下语法解决它:

如果让 urlString = urlNode["href"] { }

不确定是否正确,但去掉“.”后面的文字到目前为止似乎工作正常。

【讨论】:

    【解决方案2】:

    在我看来它就像你原来的构造,

    urlNode.objectForKeyedSubscript("href") 
    

    String? 类型(可选字符串)而不是其他类型。因此as? 演员表是错误的。你应该只使用

    if let urlString = urlNode.objectForKeyedSubscript("href")? {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-05
      相关资源
      最近更新 更多