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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

Q&A

解決済

2回答

1185閲覧

swiftで画面遷移がうまくいきません。

ShintaroOKUMURA

総合スコア21

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2016/12/02 13:07

###前提・実現したいこと
ボタンが押された時に関数を呼び出して画面遷移時に次の画面に受け渡して表示させたいのですが、どうもうまくいきません。エラーなどはないのですが、表示されないのでご指摘お願いいたします。

###発生している問題・エラーメッセージ

画面遷移がうまくいかない。

###該当のソースコード

swift3.0

1//1つ目の画面のプログラムです 2class ViewController: UIViewController { 3 //画面から戻ってきたときの処理 4 @IBAction func backToTop(segue: UIStoryboardSegue) { 5 } 6 7 //受け渡す際に使う配列の変数 8 var ukewatasu:String = "" 9 10 //スクールバス四条畷行きの結果をJikokuViewControllerに渡す処理 11 //画面遷移時の処理 12 13 14 override func viewDidLoad() { 15 16 super.viewDidLoad() 17 // Do any additional setup after loading the view, typically from a nib. 18 } 19 20 override func didReceiveMemoryWarning() { 21 super.didReceiveMemoryWarning() 22 // Dispose of any resources that can be recreated. 23 } 24 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 25 if(segue.identifier == "gojikoku") { 26 let jvc: JikokuViewController = (segue.destination as? JikokuViewController)! 27 jvc.a = String(describing: result()) 28 } 29 } 30 31 @IBAction func sbSijyou(_ sender: AnyObject) { 32 result() 33 } 34//こちらが2つ目の画面のプログラムです 35class JikokuViewController: UIViewController { 36 var a:String = "" 37 38 override func viewDidLoad() { 39 super.viewDidLoad() 40 41 //labelに時刻を表示 42 43 jikokuLabel.text = a 44 // Do any additional setup after loading the view. 45 } 46 47 override func didReceiveMemoryWarning() { 48 super.didReceiveMemoryWarning() 49 // Dispose of any resources that can be recreated. 50 } 51 52 53 /* 54 // MARK: - Navigation 55 56 // In a storyboard-based application, you will often want to do a little preparation before navigation 57 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 58 // Get the new view controller using segue.destinationViewController. 59 // Pass the selected object to the new view controller. 60 } 61 */ 62 63 @IBOutlet weak var jikokuLabel: UILabel! 64} 65 66//result関数 67 func result() { 68 69 let timeFormatter = DateFormatter() 70 timeFormatter.dateFormat = "HH:mm:ss" 71 let nowString = timeFormatter.string(from: NSDate() as Date) 72 let nowTime = timeFormatter.date(from: nowString)! 73 let jikokuArray: [(String, String)] = [("次のバス発車時刻 AM","9:10:00"),("次のバス発車時刻 AM","9:50:00"),("次のバス発車時刻 AM","10:10:00"),("次のバス発車時刻 AM","10:50:00"),("次のバス発車時刻 AM","11:10:00"),("次のバス発車時刻 AM","11:30:00"),("次のバス発車時刻 AM","11:50:00"),("次のバス発車時刻 PM","12:10:00"),("次のバス発車時刻 PM","12:50:00"),("次のバス発車時刻 PM","13:10:00"),("次のバス発車時刻 PM","14:10:00"),("次のバス発車時刻 PM","15:10:00"),("次のバス発車時刻 PM","15:20:00"),("次のバス発車時刻 PM","15:50:00"),("次のバス発車時刻 PM","16:05:00"),("次のバス発車時刻 PM","16:42:00"),("次のバス発車時刻 PM","16:50:00"),("次のバス発車時刻 PM","16:55:00"),("次のバス発車時刻 PM","17:00:00"),("次のバス発車時刻 PM","17:05:00"),("次のバス発車時刻 PM","17:50:00"),("次のバス発車時刻 PM","18:05:00"),("次のバス発車時刻 PM","18:35:00"),("次のバス発車時刻 PM","18:50:00"),("次のバス発車時刻 PM","19:05:00"),("次のバス発車時刻 PM","19:35:00"),("次のバス発車時刻 PM","19:50:00"),("次のバス発車時刻 PM","20:05:00"),("次のバス発車時刻 PM","20:35:00"),("次のバス発車時刻 PM","21:05:00") ] 74 75 76 let resultArray: [(String, String)] = jikokuArray.flatMap({ 77 let diff = timeFormatter.date(from: $0.1) 78 return nowTime.timeIntervalSince(diff ?? nowTime) > 0 ? nil : $0 79 }) 80 81 if resultArray.count > 0, let result = resultArray.first { 82 print("\(result.0):\(result.1)") 83 } else { 84 print("本日のダイヤは終了しました。") 85 } 86 } 87

###補足情報(言語/FW/ツール等のバージョンなど)
swift 3.0
xcode 8.0

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

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

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

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

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

fuzzball

2016/12/02 13:20

prepare(for:sender:)のif文の中を通っているでしょうか?print文を追加して確認して下さい。また、「どうもうまくいきません」ではなく、どううまくいかないのか書いて下さい。
ShintaroOKUMURA

2016/12/02 13:30

ご返事ありがとうござます。確認した所if文は通っていました。ボタンを押した時に画面遷移はできているのですが、表示されるのは()が表示されてしまいます。Alloutputの部分はresult()の結果と()が出力されています。この()はどこからきているものなのでしょうか。
guest

回答2

0

今のresult()は戻り値がないので()になります。
関数内でprintしたものが戻り値になるわけではありません。
result()に戻り値を付けて下さい。

関数の最初の行に-> 戻り値の型を追加し、return 戻り値で値を返します。

swift

1func result() -> String { 2 return "hogehoge" 3} 4 5let a = result() 6print(a) 7//=> hogehoge

投稿2016/12/02 16:28

fuzzball

総合スコア16731

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

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

0

ベストアンサー

result()関数は結果をprintしているだけで値を返していません、
厳密にはfunc result() -> Voidが返されています、Void = ()糖衣構文(syntactic sugar)(簡単に言うと省略形)なので()が表示されということです、
以下のように文字列を返すようにして値を渡してください。

swift

1 2override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 3 if(segue.identifier == "gojikoku") { 4 let jvc: JikokuViewController = (segue.destination as? JikokuViewController)! 5 6 // ↓修正 7 jvc.a = result() 8 } 9} 10 11//result関数 12func result() -> String { 13 14 let timeFormatter = DateFormatter() 15 timeFormatter.dateFormat = "HH:mm:ss" 16 let nowString = timeFormatter.string(from: NSDate() as Date) 17 let nowTime = timeFormatter.date(from: nowString)! 18 let jikokuArray: [(String, String)] = [("次のバス発車時刻 AM","9:10:00"),("次のバス発車時刻 AM","9:50:00"),("次のバス発車時刻 AM","10:10:00"),("次のバス発車時刻 AM","10:50:00"),("次のバス発車時刻 AM","11:10:00"),("次のバス発車時刻 AM","11:30:00"),("次のバス発車時刻 AM","11:50:00"),("次のバス発車時刻 PM","12:10:00"),("次のバス発車時刻 PM","12:50:00"),("次のバス発車時刻 PM","13:10:00"),("次のバス発車時刻 PM","14:10:00"),("次のバス発車時刻 PM","15:10:00"),("次のバス発車時刻 PM","15:20:00"),("次のバス発車時刻 PM","15:50:00"),("次のバス発車時刻 PM","16:05:00"),("次のバス発車時刻 PM","16:42:00"),("次のバス発車時刻 PM","16:50:00"),("次のバス発車時刻 PM","16:55:00"),("次のバス発車時刻 PM","17:00:00"),("次のバス発車時刻 PM","17:05:00"),("次のバス発車時刻 PM","17:50:00"),("次のバス発車時刻 PM","18:05:00"),("次のバス発車時刻 PM","18:35:00"),("次のバス発車時刻 PM","18:50:00"),("次のバス発車時刻 PM","19:05:00"),("次のバス発車時刻 PM","19:35:00"),("次のバス発車時刻 PM","19:50:00"),("次のバス発車時刻 PM","20:05:00"),("次のバス発車時刻 PM","20:35:00"),("次のバス発車時刻 PM","21:05:00") ] 19 20 21 let resultArray: [(String, String)] = jikokuArray.flatMap({ 22 let diff = timeFormatter.date(from: $0.1) 23 return nowTime.timeIntervalSince(diff ?? nowTime) > 0 ? nil : $0 24 }) 25 26 if resultArray.count > 0, let result = resultArray.first { 27 return "\(result.0):\(result.1)" 28 } else { 29 return "本日のダイヤは終了しました。" 30 } 31}

投稿2016/12/02 15:14

編集2016/12/02 17:12
_Kentarou

総合スコア8490

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

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

ShintaroOKUMURA

2016/12/03 11:25

ご返事が遅くなり申し訳ありません。Kentatou様今回もありがとうございます。 関数の関しての知識がKentarou様のおかげで少し深まりました。誠にありがとうございます。 周りに質問や話し合える人達がいないので大変役に立たせてもらっております。何卒今後もよろしくお願いいたします! ベストアンサーに選ばせさせてもらいます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問