20210416のiOSに関する記事は4件です。

【Swift】NotificationCenterのuserInfoで値の受け渡しをする

はじめに NotificationCenterで値の受け渡しをする方法を解説します。 実装 import UIKit final class ViewController: UIViewController { @IBOutlet private weak var label: UILabel! override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(someFunc), name: .someName, object: nil) } @objc private func someFunc(notification: Notification) { if let num = notification.userInfo?["someKey"] as? Int { label.text = String(num) } } @IBAction private func buttonDidTapped(_ sender: Any) { NotificationCenter.default.post(name: .someName, object: nil, userInfo: ["someKey": 10]) } } extension Notification.Name { static let someName = Notification.Name("someName") } 解説 まず、Notificationの名前を定義しておきます。 extension Notification.Name { static let someName = Notification.Name("someName") } 次に、NotificationCenterに先ほど定義したNotificationのNameを持つObserverを追加します。 ここで登録したセレクター関数は任意のタイミングでpostした時に呼ばれる関数になります。 override func viewDidLoad() { NotificationCenter.default.addObserver(self, selector: #selector(someFunc), name: .someName, object: nil) } 任意のタイミングでpostして先ほど登録しておいたObserverに処理をするよう通知を発行します。この時、引数のuserInfoに辞書で渡したい値を設定します。 @IBAction private func buttonDidTapped(_ sender: Any) { NotificationCenter.default.post(name: .someName, object: nil, userInfo: ["someKey": 10]) } セレクター関数を定義します。ここで先ほどpostした時に設定した値をNotificationを通して受け取ります。 @objc private func someFunc(notification: Notification) { if let num = notification.userInfo?["someKey"] as? Int { label.text = String(num) } } おわりに おわりです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

App Development with Swiftに合格してきた

はじめに iOSエンジニアになり早9ヶ月。 弊社も資格取得に力を入れている中、せっかくならiOS関連の資格を何か取得できないかと思い、"App Development with Swift"を受験してみることに。 取得にあたり、Qiitaや他のサイトでも合格体験記があまりなかったので、せっかくなのでここに残すことにします。 これから取得を目指す人、何か資格を探している人などは是非読んでいってもらえたらと思います。 ちなみに受験時の筆者スペック - iOS開発歴:9ヶ月 - センター試験・英語:150点(くらいだった気がする。なお5年前) - TOEIC:450点(くらいだった気がする。なお3年前) 試験概要 資格名:App Development with Swift 科目名:App Development with Swift Level 1 試験時間:50分 試験の言語:英語(2021年4月現在、日本語対応は未定) 試験方式:CBT試験 問題数:45問 合格ライン:(おそらく)7割 要はSwift、Xcodeなど、iOSアプリ開発者として必要な知識、スキルを証明する資格です。 Level2はまだ無いのではないでしょうか。筆者が調べてみた限りでは見つからなかったですね。 詳しくはこちらのサイトをご覧ください。 App Development with Swift 公式HP 出題範囲 大きく分けてセクションは以下の3つです。 Developer Tools Xcode & Builder Interface Swift Language Fundamentals iOS API Fundamentals 上記サイトにて、学習教材が提供されているので、そちらをやれば十分かと。 ただし、過去問などは一切出回っていないので、他の試験で過去問をやりまくって合格してきた人は大変かもしれません。 逆に言うと、実際に開発経験のある方はそこまで難しくないと言えます。 Swiftの基本的文法から、Xcodeの説明、ライフサイクルやMVCなど満遍なく出題されます。 出題形式 選択問題(択一問題)・・・複数の選択肢の中から一つ選択 選択問題(複数回答)・・・選択肢の中から複数を選んで回答 記述問題・・・ソースコードの穴になっている箇所の補完、文章が正しくなるように単語の記述など ドラッグ&ドロップ・・・並び替え、選択肢を対応するものにドラック&ドロップ、問題に対応する箇所をクリック Apple推奨の教材にも問題は載っていますが、ほぼほぼ参考にならないので、自分で手を動かして一つずつ理解していくことをオススメします。 勉強法 Apple推奨教材を読み込む 日頃の開発(笑) 以上です!笑 問題集がない以上、やはり手を動かさなければ理解できないです。 私の場合は、たまたま開発業務があったので、それである程度は実践経験を積めたのでよかったですが、もし開発業務がないって人はApple推奨の教材に一緒にハンズオンしていく箇所もあるので、そちらを進めることをオススメします。 しかしながら、Xcodeの画面を見て答える問題やAutoLayoutの説明、UIパーツの説明などは、やはり日頃から開発に触れていないと答えるのが厳しい気がします。なので、簡単なアプリでも良いので作ってみることをオススメします。 開発はやっていないけど資格だけ取ろうって人はかなり厳しいのではないかと。 開発をやっている人前提の資格というイメージですね。 受験結果と感想 正直に言います。1回目は落ちました。笑 推奨教材が900ページを超えるということと、その900ページが全て英語ということで、英語弱者の筆者としてはやりたくなかったです。 日頃の開発知識だけでどうにかしようと実質ノー勉で行きました。 が、結果は1000点満点中680点でした。700点が合格ラインなはずです。 敗因としては、 1. 開発でカバーしている箇所とそうでない箇所の理解の差が激しい 2. 無意識に使用しているものをいざ聞かれたときに回答できない この2点だったかなと思います。 ということで、1ヶ月後にもう一度受けました。 その際は、教材とGoogle翻訳をiPadに並べ、開発で触れない箇所を重点的に勉強しながら、ひたすらコピペで読み進めました。 そうして迎えた再試験、なんとか830点とって合格でした。 英語は実際どうなの? 多くの方が気になる箇所って、これだと思うんですよ。 ご存知の通り、問題文、回答全て英語です。そりゃそうですよね、Apple主催の試験なんですから。笑 筆者もこれがネックで受験することを渋っていました。筆者の英語スペックは上記に挙げた通りで、極力英語に触れないように生きてきました。 しかし、受けてみての感想は、ぶっちゃけあまり関係ないです。 「以下の選択肢から選びなさい」 「上記のソースコードの空白部分に対応するものを選びなさい」 「画面で対応する箇所をクリックしなさい」 「正しい順番に並べ替えなさい」 などなど、なんとなく読まなくても問題を見れば文章は予測できます。 たまに、絶妙に単語の意味がわからなくて2択で悩んだりしますが。笑 また、45問の問題数に対して試験時間は50分あるので、1問に1分かけたとしてもお釣りがきます。ゆっくり文章を読んでもらって大丈夫です。 筆者の場合は、2回目は一周して見直しをしても30分ほどで試験は終了しました。 結局大事な知識は、英語力よりもSwiftやXcodeに関する知識です。 これがあれば多少英語で詰まって怪しい問題があったとしても、合格点数を下回ることはないでしょう。 最後に 今回二度目ではありましたが、なんとか合格できてよかったなという感じです。 普段使わない分野や、これから開発で使おうとしていた知識も身につけることができたので、開発の質や守備範囲も広がったなという印象です。 引き出しの数は多くて損することはないですね。 iOS開発をしている方は、是非知識整理やスキルチェックのためにも受験してみてはいかがでしょうか。 AppleがLevel2を出したら、そちらも受験してみようかなと思います。 それでは。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

NSExpressionで加算を行う

CoreData周りの技術を使っていると、たまにNSExpressionが利用できると便利そうなケースがありますが、これまでなるべく避けておりました。今回、やっと使い方を調べてテストをパスしたので、似たようなニッチなところで困っている人のために記事を残しておきます。 利用可能なオペレーター expressionForFunction:arguments:のDiscussionで利用可能なオペレーターが列挙されています。 使い方 FUNCTIONなどで包まず、add:to:(param1, param2)という形式で指定します。 func testAddingTwoNumbersWithExpression() throws { let exp = NSExpression(format: "add:to:(1, 2)") let intValue = try XCTUnwrap(exp.expressionValue(with: nil, context: nil) as? Int) XCTAssertEqual(3, intValue) } 他のオペレーションの使い方 引数を2つ取るものは同様にxxx:yy:(param1, param2)の記法で、 引数を1つしか取らないものはxxx:(param1)の記法で実装します。 引数が1つの場合のサンプル func testAbs() throws { let exp = NSExpression(format: "abs:(-3)") let intValue = try XCTUnwrap(exp.expressionValue(with: nil, context: nil) as? Int) XCTAssertEqual(3, intValue) } 注意点 パラメーターは必ず丸括弧の中に記載してください。そうでないとパースに失敗してエラーを投げます。 どこで使うか NSBatchUpdateRequestのpropertiesToUpdateやxcmappingmodelでのmigration時に簡単な処理の実行させるのに使うと便利です。 おまけ: カスタム処理を利用する カスタム処理はFUNCTIONを利用することで利用可能です。 @objc public extension NSNumber { func threeTimes() -> NSNumber { return NSNumber(value: self.intValue * 3) } } // テストターゲット内 func testThreeTimes() throws { let exp = NSExpression(format: "FUNCTION(1, 'threeTimes')") let result = try XCTUnwrap(exp.expressionValue(with: nil, context: nil) as? NSNumber) XCTAssertEqual(result, 3) } 参考 How to use modulus operator with NSExpression?
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Flutter】Textを簡単にグラデーションさせる

パッケージのインストール gradient_textを導入すれば簡単にテキストのグラデーションを実装できます。 pubsub.yml gradient_text: ^1.0.2 インポート import 'package:gradient_text/gradient_text.dart'; グラデーション可能なテキストウィジェットを作成 テキストウィジェットを下記のGradientTextに置き換えるだけです。 GradientText("テキスト", gradient: LinearGradient( //ここでグラデーションの色を複数設定できる colors: [Colors.deepPurple, Colors.deepOrange, Colors.pink] ), style: TextStyle(fontSize: 30), //スタイルも設定可能 textAlign: TextAlign.center); //テキストの配置
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む