2017-10-17 28 views
0

alamofire変数内からグローバル変数を変更しようとしていますが、問題が発生しています。ここに私のコードは次のとおりです。私はここにself.projectsを印刷するとき関数内からグローバル変数を変更できません

var projects = [[String]]() 
var xmlToParse = String() 
var postTitle = String() 
var postLink = String() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    httpRequest("https://www.hello.com/feed") { response in 
     self.xmlToParse = response as String 
     let xml = SWXMLHash.parse(self.xmlToParse) 

     for elem in xml["rss"]["channel"]["item"].all { 
      self.postTitle = elem["title"].element!.text 
      self.postLink = elem["link"].element!.text     
      self.projects.append([self.postTitle, self.postLink]) 
     } 
    } 
    print(self.projects) 
} 

、私はHttpRequestの関数内にそれを印刷するときしかし、私は適切なデータを取得し、空の配列を取得します。 forループ内のグローバル変数プロジェクトを設定していませんか?その関数の外で値を取得するにはどうすればよいですか?私はSOで見つけたものすべてを試してみましたが、成功しませんでした。どんな助けでも大歓迎です。

ただ、詳細は、ここに私のHttpRequest関数である。

[ "RSS"] [ "チャンネル"] [ "アイテム"]はnilでないこと、XMLと仮定すると
func httpRequest(_ section: String, completion: @escaping (String) -> Void) { 
    Alamofire.request(section, method: .get).responseString { response in 
     completion(response.result.value!) 
    } 
} 
+2

httpRequest関数が補完ハンドラを呼び出す前でも、self.projectsを出力しているからです。 – koropok

+0

Hmm ..だから、どのようにしてプロジェクト配列にViewDidLoadで適切なデータと他の関数でアクセスできるようにすることができますか? –

+0

ロジックを補完ハンドラ内に配置するだけではどうですか? – koropok

答えて

1

が...

override func viewDidLoad() { 
    super.viewDidLoad() 

    httpRequest("https://www.hello.com/feed") { response in 
     self.xmlToParse = response as String 
     let xml = SWXMLHash.parse(self.xmlToParse) 

     for elem in xml["rss"]["channel"]["item"].all { 
      self.postTitle = elem["title"].element!.text 
      self.postLink = elem["link"].element!.text     
      self.projects.append([self.postTitle, self.postLink]) 
     } 

     self.setup() 
    } 
} 

func setup() { 
    // Your logic here 
} 
+0

ありがとうございます。私はセットアップに行くものは混乱しています。元の関数httpRequest? –

+0

また、私がやっている次のことは、nilのエラー処理になります:) –

+0

あなたはsetup内でself.projectsを使ってやる予定のコードを置くことができます。そうすることで、self.projects変数にすでにある値が割り当てられていることを確認できます。 – koropok

関連する問題