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

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

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

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

Q&A

解決済

1回答

1485閲覧

翻訳アプリを作ろうと思っているのですが、NSNotificationの使い方がわかりません。

shanqi

総合スコア12

Swift

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

0グッド

1クリップ

投稿2015/07/19 14:15

cocoapodsのneetmstranslatorを使って翻訳アプリを作ろうと思っているのですが、UILabelに翻訳結果を表示させることができません。

http://qiita.com/mironal/items/875234f044dcb192a50e

※イメージとしては、textfield(translator.text)内の単語を英語(en)に翻訳し、label(result.text)に結果を表示させたいと考えてます。

あれこれ原因を探った結果、恐らくneetmstranslatorの処理に時間がかかり、先にlabelがデフォルトで表示されているのが原因ということまでは分かりました。

その代わりに一時的にstring変数に保存し、別のクラスでnsnotificationを使用して呼び戻そう考えたのですが、いまいち「どこに、どの様に」nsnotificationを書き込めば良いか分かりません。
ど素人でも分かるように説明していただけると幸いです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

《自力でやってみた結果、以下のコードのようになりました》
※result.text = MyNotificationの所で「Cannot assign a value of type "NSNotification" to a value of type " String!"」というエラーが出てしまいます・・・・・

import UIKit
let MyNotification = NSNotification(name: "MyNotification", object: nil)

class ViewController: UIViewController {

@IBOutlet var translation: UITextField! @IBOutlet var result: UITextView! var t = NMSTranslator() override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: "myFunc:",name: "MyNotification" , object: nil) } @IBAction func translation(sender: AnyObject) { NSNotificationCenter.defaultCenter().postNotificationName("MyNotification", object: nil) var t = NMSTranslator() t.initializeTranslatorWithClientID ("+++", clientSecret: "+++") t.transrateWithText(translation.text, to: "en", success: { (response, String) -> Void in "MyNotification"}) {(response, data, err) -> Void in "MyNotification"} } func myFunc(notification: NSNotification) { result.text = MyNotification NSNotificationCenter.defaultCenter().removeObserver(self , name: "MyNotification", object: nil) }

}

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

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

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

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

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

guest

回答1

0

ベストアンサー

NSNotificationを使う必要はありません。
transrateWithTextメソッドのsuccess:のところで、翻訳結果を受け取ってください。

投稿2015/07/19 14:58

Stripe

総合スコア2183

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

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

shanqi

2015/07/19 15:13

ありがとうございます! @IBAction func translation(sender: AnyObject) { var t = NMSTranslator() t.initializeTranslatorWithClientID ("×××", clientSecret: "×××") t.transrateWithText(translation.text, to: "en", success: { (response, string) -> Void in result.text}) { (response, data, err) -> Void in println(err)} } ということですかね??これは当初やってみた手法なのですが、翻訳に時間がかかるため、結果が表示される前に、UILabelが表示されてしまうみたいなんです???? そのような場合、どうしたら良いのでしょうか? (筋違いなお答えをしていたら申し訳ございません・・)
Stripe

2015/07/19 15:24

{(response, string) -> Void in result.text = string} となるのでは?
shanqi

2015/07/19 16:06

Stripeさん: できました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問