2017-05-24 9 views
-1

내 질문에 대한 새로운 접근. 나는 그것이 분명하지만 분명히 가 아니라고 생각했다. : - 두 번째 기회.구조체를 선택하는 신속한 변수

웹 사이트에서 정보를 얻으려면 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() 
} 

이 문제를 해결할 방법이 없습니다. 다른 누군가? (1 개) 웹 사이트에 대한 원래의 기능에

추신 : 내가 사용

var TorrentProviderItem: [ExtraTorrentItem] 

와 잘 작동 스위치없이

.

+0

"누군가 나를 도울 수 있습니까?" 당신이 당신의 Q를 편집하고 달성하고자하는 것에 대한 훨씬 더 철저한 설명, 시도한 것에 대한 실제 코드, 정확한 컴파일러 오류 (그리고 어떤 라인)를 추가 할 때까지는 그렇지 않을 것입니다. 이 정보없이 질문에 대답하는 것은 불가능합니다. "2에 몇 가지 다른 숫자가 더한 것"처럼? - 우리가 말할 수있는 가장 좋은 점은 "다른 번호가 무엇이든간에 두 번입니다"라는 것입니다. –

+0

@ Joshua Nozzi 좋은 지적으로, 나는 내 질문을 완전히 바꿨다. 코드를 가지고 놀면서 답을 찾기 위해 놀았습니다. 모든 "테스트"코드를 저장하지 않았으므로 내가 시도한 모든 것을 보여줄 수는 없습니다. 제시된 코드는 내가 가지고있는 닫힌 것이다. –

+0

타입'XMLIndexer'는 소스 코드에 따라'value()'라는 함수를 갖고 있지 않습니다. – JeremyP

답변

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 내에 있다고 생각합니다. 각 웹 사이트에 대한 구조체 대신 모든 웹 사이트에 대해 하나의 구조체를 사용하는 것. 나는 이것을 어떻게하는지 모른다. 제트기.