-1

问我问题的新方法。我以为很清楚,但显然不是。:-D 第二次机会。

我使用 SWXMLhash 从网站获取信息。对于每个网站,我需要不同的结构,因为每个网站的数据结构都不同。

我有一个很好的工作功能(使用 1 个网站作为源),我想根据所选网站将其转换为通用功能。

到目前为止我得到的最好的解决方案(见下面的代码)让我编译错误:

 TorrentProviderItem = try xmlTorrent["rss"]["channel"]["item"].value()

编译错误 = 对成员“下标”的不明确引用

功能代码:

 private func setResultsToEqualData(result: String, Torrentprovider: TorrentProviders) {
    var TorrentProviderItem: [XMLIndexerDeserializable]
    var xmlTorrent: XMLIndexer!
    xmlTorrent = SWXMLHash.parse(result)

    switch Torrentprovider {
    case .ExtraTorrent:
        TorrentProviderItem = [ExtraTorrentItem]()
    default:
        TorrentProviderItem = [Torrentz2Item]()
    }

    do {
        TorrentProviderItem = try xmlTorrent["rss"]["channel"]["item"].value()
    } catch {
        print("FOUT in torrent!!")
        return
    }

    selectBestResult()
}

我不知道如何解决这个问题。还有谁?

ps 在我使用的 1 个网站的原始功能中:

var TorrentProviderItem: [ExtraTorrentItem]

没有开关,效果很好。

4

1 回答 1

0

有些人向我展示了结构中函数的选项。所以我用它来构建一个解决方法。我在每个网站的每个结构中都写了一个函数,每个函数的返回值都是相同的数据类型。

对我来说,这是一种解决方法,而不是解决方案。我仍然必须将每个网站添加到该功能中(见下文)。

private func setResultsToEqualData(result: String, Torrentprovider: TorrentProviders) -> torrentProviderItem? {
    var TorrentProviderItem = [torrentProviderItem]()
    var xmlTorrent: XMLIndexer!
    xmlTorrent = SWXMLHash.parse(result)

    switch Torrentprovider {
    case .ExtraTorrent:
        var tempExtraTorrentItem: [ExtraTorrentItem]
        do {
            tempExtraTorrentItem = try xmlTorrent["rss"]["channel"]["item"].value()
            for item in tempExtraTorrentItem {
                TorrentProviderItem.append(item.result())
            }
        } catch {
            print("FOUT in torrent!!")
            return nil
        }

    case .Torrentz2:
        var tempTorrentz2Item: [Torrentz2Item]
        do {
            tempTorrentz2Item = try xmlTorrent["rss"]["channel"]["item"].value()
            for item in tempTorrentz2Item {
                TorrentProviderItem.append(item.result())
            }
        } catch {
            print("FOUT in torrent!!")
            return nil
        }
    }
    return (selectBestResult(results: TorrentProviderItem))
}

我认为创建通用函数的解决方案在于 Strucs。为所有网站使用一个结构,而不是为每个网站使用一个结构。我只是不知道该怎么做。喷射。

于 2017-05-26T05:09:15.080 回答