20210501のSwiftに関する記事は5件です。

【Swift】コードでUITabBarControllerを実装する

Storyboardを使わずに、コードのみでUITabBarControllerを実装する方法まとめ。 環境 Xcode12.4 Swift5 1. 各タブに表示するViewControllerを準備する 今回は、以下のファイルを新規作成する。 ・FirstViewController ・SecondViewController ・ThirdViewController ・FourthViewController タブを切り替えた際に、わかりやすいようにそれぞれの背景色だけ変更しておく。 FirstViewController import UIKit class FirstViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .red } } 2. ViewControllerをUITabBarControllerに設定する MainTabController import UIKit class MainTabController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() configureViewControllers() } func configureViewControllers() { let first = FirstViewController() first.tabBarItem = UITabBarItem(title: "Home", image: UIImage(systemName: "house"), selectedImage: nil) let second = SecondViewController() second.tabBarItem = UITabBarItem(title: "Chat", image: UIImage(systemName: "message"), selectedImage: nil) let third = ThirdViewController() third.tabBarItem = UITabBarItem(title: "Book", image: UIImage(systemName: "book"), selectedImage: nil) let fourth = FourthViewController() fourth.tabBarItem = UITabBarItem(title: "Person", image: UIImage(systemName: "person"), selectedImage: nil) viewControllers = [first, second, third, fourth] } } Storyboardを使わない設定に変更する 最初はMain.storyboardが呼ばれるようになっているため、修正する。 TARGETS > General > Development InfoのMain Interfaceを空白にする。 Info.plistのInformation Property List > Application Scene Manifest > Scene Configuration > Application Session Role > Item 0 > Storyboard Nameの項目を削除する。 Info.plistのInformation Property List > Main storyboard file base nameの項目を削除する。 SceneDelegate.swiftを修正する。 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let scene = scene as? UIWindowScene else { return } window = UIWindow(windowScene: scene) window?.rootViewController = MainTabController() window?.makeKeyAndVisible() }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Swift】iPhoneのStatusBarを白にする

はじめに iPhoneの上部に表示されているステータスバー(Wifiや時間が表示されているところ)の色をアプリ全体で変更する方法を書きます。 実装方法 Project → Targets → Deployment Info → Status Bar Style Light Contentに変更します。 Info.plistにView controller-based status bar appearanceを追加します。 以上でStatusBarを白に変更することができます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ビルドの際のエラーの解消. - Could not find module for target

以下のエラーの対応を説明します Realmにて以下のエラーが発生 Could not find module 'RealmSwift' for target 'x86_64-apple-ios-simulator'; found: arm64, arm64-apple-ios-simulator 解決策 BuildSettingsのExcludedArchitectures > DebugにAny iOS Simulatorのx86_64を追加した。 するとビルドができるようになりました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

たった3日で手軽に始める高コスパSwift入門

私はMENTAでSwiftやNext.js(React)・Firebaseなどを中心にプログラミングを教えております。 そこで、初心者の方にいつもオススメしている市販の参考書を使った学習方法について紹介致します。 教材選び、これはとても難しい問題です。 良い教材があったとしても時間が経つと、内容が古くなり悪い教材になってしまう場合もあります。 また、どれが良い本かというのも初学者だからこそ判断がつきにくいと思います。 この記事では、書店で実際にいくつか比較した2冊のおすすめ書籍を紹介いします。 この記事だけではなく、常に情報が何月何日に書かれたものかかなり気にしてください。 鮮度が悪いジャンルでは1年以内が望ましく、2年で限界ぐらいで考えても良さそうです。 Swiftに関わらず「文法書と応用書」この2冊以上の組み合わせで勉強するのが良いと考えています。 そのあと、すぐに何かを作ってみるというステップを私はオススメしています。 文法書 とっつきやすさという点で、こちらの書籍をオススメします。 たった1日で基本が身に付く! Swift アプリ開発 超入門 応用書 たった2日でマスターできるiPhoneアプリ開発集中講座シリーズをオススメします。 SwiftUI対応 たった2日でマスターできるiPhoneアプリ開発集中講座 Xcode 12/iOS 14対応 たった2日でマスターできるiPhoneアプリ開発集中講座 Xcode 11 Swift 5対応 最新版は、Xcode12と書いてある前者です。 ただ、SwiftUIで書いてある点が悩みどころなんですね... 賛美両論あるところではあると思われますが SwiftUIは発展途上であるため いまSwiftUIに関する部分を初学でやるというのが 素直におすすめできないと考えております。 そのため、控えめに後者のXcode11版をオススメします。 ただし、古いので読み替えないといけない部分がある可能性があり そこは苦労する可能性があります。 でも教科書でハマってしまったら? その時はプログラミングの質問ができるMENTAで聞きましょう! 市販の参考書+ハマったらMENTA、これがおそらく高コスパを実現します。 こちらは、500円クーポンがもらえる招待リンクです。 私もこのサイトに登録しているので 「米本剛士」で検索して頂きご依頼いただければご対応可能です。 もちろん、他の方を探して頂くのでもいいと思います。 MENTAを上手く使ってあげてください。 教科書が終わったら? なにか作ってみましょう! 企画が思いつかなければ誰かに相談してみましょう。 こちらもMENTAが活用できますよ。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

0 からアプリをリリースしてみよう!〜第二話〜

0からアプリをリリースしてみよう!〜第二話〜 はじめに みなさんこんにちは。paulownia friendsです。第二話の今回はプログラミングを進めていく上で大切なちょっとしたコツや、デバックの方法などについて紹介していこうと思います。 前回の記事をまだ読んでいないよ!という方は、ぜひ第一話もご覧ください。 1.段落を揃える swiftはpythonなどの他の言語と異なり段落を揃える必要がない言語ですが、段落をしっかり揃えてコードを記述することは意外に大切です。主な利点としては以下のようなことがあげられます。   1. コードを読む人が見やすく理解しやすい     →自分だけでなく審査する人にとっても読みやすいコードになる   2. エラーが起きた際にどの箇所が原因になっているのかわかりやすい 利点を列挙するとあまり大したことがないように思えますが、実際にTabキーを使ってインデントをしっかり揃えて書くとそのありがたみを実感できると思うので、ぜひインデントを揃えるようにしてみてください。 実際の揃え方のコツ 基本はTabキーを用いてインデントし、if文などで{}を用いる際にはその中ではもう一度Tabキーを用いてさらに一段下げるようにしましょう。 Tabキーを押すと基本的には右にずれていきますが、ずらしすぎてしまった際などは Shift+Tab を押すことで左側にずらしていくことができます。 calssや{}内のコードが非常に大きい関数などは、どの閉じかっこ } で閉じているのか分かりづらくなってしまうことがあるので、閉じかっこの後ろにコメントをつけて分かりやすくしておくと便利です。この時、関数の中の処理を記述してから閉じかっこにコメントをつけるのではなく、関数などを定義し始める一番初めの段階でコメントをつけておくと楽です。 実際に上記のコツを意識してインデントを揃えたコードとそうでないコードの例を以下に記しましたので、見比べてみてください。 ↓インデントを揃えたコード @IBAction func backButton(_ sender: Any) { flag = true if adInterval == true{ adInterval = false if interstitial.isReady { interstitial.present(fromRootViewController: self) } else { print("Ad wasn't ready") interstitial = createAndLoadInterstitial() let nextView = storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController nextView.modalTransitionStyle = .crossDissolve nextView.modalPresentationStyle = .fullScreen self.present(nextView, animated: true, completion: nil) } } else{ interstitial = createAndLoadInterstitial() let nextView = storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController nextView.modalTransitionStyle = .crossDissolve nextView.modalPresentationStyle = .fullScreen self.present(nextView, animated: true, completion: nil) adInterval = true } }//end BackButton ↓インデントを無視したコード @IBAction func backButton(_ sender: Any) { flag = true if adInterval == true{ adInterval = false if interstitial.isReady { interstitial.present(fromRootViewController: self)}else{ print("Ad wasn't ready") interstitial = createAndLoadInterstitial() let nextView =storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController nextView.modalTransitionStyle = .crossDissolve nextView.modalPresentationStyle = .fullScreen self.present(nextView, animated: true, completion: nil) } } else{ interstitial = createAndLoadInterstitial() let nextView = storyboard?.instantiateViewController(withIdentifier:"ViewController") as! ViewController nextView.modalTransitionStyle = .crossDissolve nextView.modalPresentationStyle = .fullScreen self.present(nextView, animated: true, completion: nil) adInterval = true}} 2.print文を有効活用しよう これも良く言われていることですが、プログラミングにおいてprint文は非常に重要です。print文を使うと、①「どこまでは正常に動作しているのか」・②「処理の順番はどうなっているのか」・③「配列の中身の数とindexは矛盾していないか」などを確認することができます。それでは、実際に①〜③のケースを例を交えて見ていきましょう。 ①自信満々で書いたコード、赤エラーも出ずにbuildが通ったのにも拘らず、simulatorで見てみると思ったような動作をしてくれない...といった経験は多くの方がしていると思います。このとき、どこまでは正常に動作しているのかを確認することが問題解決の大きな手掛かりになります。そもそもの関数での処理がうまくいっていないのか、結果を画面に描画する際のコーディングがうまくいっていないのか、はたまた何か別の問題があるのか、といったことを把握した上で修正に入ると、そうでない場合よりも圧倒的に効率よく作業を進めることができます。 <サンプルコード> //UserDefaultでの値の保持に問題がある場合 //保存 var Array1 = ["アイウエオ"] @IBAction func appendButton(_ sender: Any) { Array1.append("あいうえお") UserDefaults.standard.set(Array1, forkey:"Array1Key") } //読み出し if UserDefaults.standard.object(forKey: "ArrayKey") != nil { Array1 = UserDefaults.standard.object(forKey: "Array1Key") as! [String] } //Array1の中身を確認 print(Array1) この時、書いた側としては、アプリを終了させたとしても、Array1 = ["アイウエオ", "あいうえお"]が残るようになって欲しいはずです。ですが、実際にやってみると、Array1 = ["アイウエオ"]となってしまっていました。このような時の原因究明にprint文が役立ちます。この場合における考えうる原因として、1.ボタンの関数が上手く動いていない, 2.保存が上手くいっていない, 3.読み出しが上手くいっていないなどがあります。そこで、このようなコードにしてみると //UserDefaultでの値の保持に問題がある場合 //保存 var Array1 = ["アイウエオ"] @IBAction func appendButton(_ sender: Any) { Array1.append("あいうえお") UserDefaults.standard.set(Array1, forkey:"Array1Key") print(Array1) print("ボタンは押せてる") } //読み出し if UserDefaults.standard.object(forKey: "ArrayKey") != nil { Array1 = UserDefaults.standard.object(forKey: "Array1Key") as! [String] print("読み出しは実行されてる") } デバッグエリアに、["アイウエオ", "あいうえお"], ボタンは押せてる,読み出しは実行されてる、と表示されるはずです。そこで、1.と2.の可能性が消えて3の可能性が残り、もういちど読み出しのコードを丹念に見ていくとUserDefaultsのforeKeyが違うことに気づくはずです。このように、print文を使って自分がどこまでできているのかを把握する手段はとても有効です。 ②ある file(例 ViewController.swift)内にて配列に値を追加して、それを別の fileで読み出そうとしたのに、上手く読み出せなくてout of rangeの赤エラー...といったエラーも時には起こります。また、同じようなケースとして、遷移時に、コードで遷移してついでに何か動作を行うはずなのに、上手く動作が行われないまま遷移だけがなされてしまう...といったエラーもたまに起こるでしょう。そのような時に、print文を用いて処理の順番を確認すると上手く問題を解決することができます。 ③端末内完結型のツールアプリを作る上で、配列を使いこなすことは必須になるでしょう。その時に、配列のindexと中身の個数が矛盾してしまい、out of langeとXcodeに言われてしまう、ということは多々起こりうるかと思います。そのような時に、print文で配列とindexを両方確認すると、問題の解決がスムーズになることがあります。配列に新たに要素を加える時、抜く時、入れ替える時などにそのようなprint文を実行することで、問題の把握が容易になり、問題解決が素早くなります。 例↓ 次回予告 次回は、コーディングをする際に必須となるXcodeの使い方に関して説明していきたいと思います。変数の名前を後からまとめて変えたいけど一個一個直すのが面倒...という方向けの、変数の名前を一気に変更する方法など、Xcodeを使いこなす上で知っておきたい様々な機能を紹介します!次回もお楽しみに! 自分たちのアプリの宣伝 私たちは、自作のリマインダーアプリ「タスクリマインダー -TaskReminder 課題管理-」、決断代行アプリ「決断メーカー」をAppStoreにて公開しています。 ~ダウンロードはこちらから~ タスクリマインダー -TaskReminder 課題管理- 決断メーカー
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む