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!)
}
}
httpRequest関数が補完ハンドラを呼び出す前でも、self.projectsを出力しているからです。 – koropok
Hmm ..だから、どのようにしてプロジェクト配列にViewDidLoadで適切なデータと他の関数でアクセスできるようにすることができますか? –
ロジックを補完ハンドラ内に配置するだけではどうですか? – koropok