質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2459閲覧

Alamofireで取得したデータを呼び出し元に返せない

Misaco

総合スコア17

Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2015/01/24 04:45

Alamofireを使い、サーバからxmlを取得しています。
パース後、タグ名と要素をDictionaryにセットしreturnしています。

lang

1import Foundation 2import Alamofire 3 4class Test : NSObject { 5 6 override init() { 7 super.init() 8 } 9 10 func login(uid: NSString) -> Dictionary<String, String> { 11 12 var dict = Dictionary<String, String>() 13 let parameters = [ 14 "param": "<?xml version='1.0' encoding='utf-8'?><TEST xmlns='http://tempuri.org/TEST.xsd'><LOGIN><ID>" + uid + "</ID><PW>cf8894c2288f</PW></LOGIN></TEST>" 15 ] 16 17 let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() 18 configuration.timeoutIntervalForResource = 1800 19 20 Alamofire.Manager(configuration: configuration) 21 Alamofire.request(.POST, "https://192.168.0.110:xxxx/Test/", parameters: parameters) 22 .responseString { (request, response, responseData, error) in 23 24 var str: String! = responseData 25 let xmlString = str 26 27 var parser = MyClass.XMLParser(xml: xmlString, element:"UserName") 28 parser.parse() 29 dict["UserName"] = parser.returnValue! 30 31 var parser = MyClass.XMLParser(xml: xmlString, element:"ErrMsg") 32 parser.parse() 33 dict["ErrMsg"] = parser.returnValue! 34 } 35 return dict 36}

呼び出し側

lang

1let testModel = TestModel() 2let dict = testModel.login(uid) 3println(dict)

実行結果

[:]


return dictの時点で何も入っていないようです。

TestModelにメンバ変数を持たせたりもしましたがダメでした。

lang

1 2class Test : NSObject { 3 4 var testString : String! 5 6 override init() { 7 super.init() 8 } 9 10 func login(uid: NSString) -> Dictionary<String, String> { 11 12 ...(中略)... 13 14 .responseString { (request, response, responseData, error) in 15 16 self.testString = responseData 17 } 18}

呼び出し側

lang

1let test = Test() 2test.login(uid) 3println(testModel.testString)

他にも戻り値をクラスにしてみたりと、いろいろ試してはみたのですが、
.responseString {...}から出てしまうとnilになります。

解決方法をご存知の方がいらっしゃいましたら、教えていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

まだ解決までは至っていませんが、returnに値が入っていない原因がわかりました(多分)。
Alamofireの処理を待たずにreturnしてしまっているから空なのかと思われます。
メソッドチェーンの戻り値を呼び出し元まで返せる方法がわかればなんとかなりそうなので、
一旦質問を締め切ります。

投稿2015/01/24 18:23

Misaco

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問