見出し画像

【12/5】ActionScriptの開発者からSwift開発者への転身

自己紹介

こんにちは、Swift開発者のクリムゾンです👨🏻‍💻
Marvel株式会社でフロントエンド兼QAエンジニアとして活動しているものでございます。現場では、Reactを使ったTypeScriptおよびJavaScriptの開発を行っていますが、個人での開発にはSwiftを使用しております。

Swiftの開発者(昔はObjective-Cでした)に転身する前に、自分は元ActionScriptの開発者でございました。今使っている言語からSwiftへの転身を考える際には、下記の主要なポイントを勉強することが重要です。👨🏻‍💻
1 Object-Oriented Programming/(OOP)
2 Foundation Framework
3 イベントハンドリング (Event Handling)
4 エラーハンドリング (Error Handling)


はじめに

Swift=iOSやAppleのハードウェアを開発するための言語です。
多くの人が、Swiftは難しい、Appleのパソコンを使わないと開発ができない、といったことをよく口にします。😭
実は、もしSwiftが難しいなら、AndroidOSを開発するためのJavaは地獄までの勉強をしなければなりません。👨🏻‍💻
しかし実際のところ、もしSwiftが難しいと感じるのであれば、Android OSの開発に使われるJavaも、かなりの勉強が必要で、まさに「地獄」のような難易度になるかもしれません。👨🏻‍💻

Object-Oriented Programming/(OOP)?

他の言語から転身しているので、現在の使用する言語が「Object-Oriented Programming」を含まれている可能性がございます。そうでない場合は、Object-Oriented Programmingを勉強してみてください。😅

それではぁぁ、iftの簡単なOOPについてご紹介したいと思います。👨🏻‍💻

※普段はこのような書き方はしません。こちらはあくまで例文です。
※分かりやすくするために、「広報」の日本語は2文字のみですので、現在のMarvel株式会社の広報を挿入する必要があります。😅

共有したコードはこんな感じです。🔥
・Crimson クラスは、プロパティとメソッドを持つオブジェクトを定義いたします。
・Crimson には、プロパティとメソッド scream() が定義されています。init メソッドは、特定の名前でオブジェクトを初期化するためのコンストラクタです。
・更にCrimson クラスは、プロパティとscream() メソッドをクラス内にカプセル化いたします。

書いていたコードはクラス、カプセル化、インスタンス化、メソッド呼び出しを使用しております。ActionScript開発者としての経験から得た知識を、新しい言語であるSwiftに活用しました。Swiftだけでなく、他のオブジェクト指向プログラミング(OOP)言語にも同じパターンを適用できます。

Foundation Framework?

これ。。。何でしょうか?👀
名前の通り、Foundation FrameworkはSwiftプログラミングのコア部分です。Swiftアプリケーションにおける基本的なデータ型、コレクション、ユーティリティなど、重要な機能を提供します。言わば、包括的なライブラリのようなものです。文字列操作、日付や時刻の計算、データ保存など、さまざまなタスクを簡単に処理できるようになります。

それでは、Swiftの簡単なFoundation Framework(かも)についてご紹介したいと思います。👨🏻‍💻

※添付したリンクは気にしないでください😅

共有したコードはこんな感じです。🔥
・3つの@Stateに関して、データに表示される値を保持するためです。@Stateはビュー内で「mutable state」を作成できるプロパティラッパーです。状態が変化するときに、画面を自動的に変更するために使用されます。

・VStackはSwiftUIのレイアウトコンポーネントでございます。CSS、JavaScript、ActionScript、TypeScriptを使ったことがある方なら、コードを見ただけで理解できると思います。😅

 Text       =表示するテキスト
 Padding   =パディングを適用する
 onAppear   =ビューが表示されたときにアクションを実行する
 self."***”        =State varを更新する機能

・そして各 private func内で更新処理を実装していきます。

ActionScriptの開発者からObjective-CおよびSwift(2014年から)の開発者に移行したとき、共有されたコードは、VStackを除けば非常に分かりやすく感じました。ActionScriptの同じ機能と比較して理解し、そして書き方をゆっくり覚えていきました。まるで翻訳をしているかのようでした。😅
因みに、なぜ「VStackを除く」と言ったのでしょうか?皆さんは分かりますか?

答えは、ActionScriptからObjective-Cに移行したのが2011年から2012年頃で、その時点ではVStackやSwiftUIはまだ存在していなかったからです。Swiftは2014年に登場し、SwiftUIは2019年にリリースされました。

イベントハンドリング (Event Handling)

macOS、iOS、iPadOSなどのアプリを作成・管理する際には、いくつかの重要なコンポーネントがあります。特に、Swift(Appleの強力なプログラミング言語)を使用したUI開発に関連する部分についてご紹介します。今回ご紹介したいのは「イベントハンドリング」です。👨🏻‍💻

Swiftのイベントハンドリングには、アプリ内でのユーザー操作やその他のイベントへの応答が含まれます。主な3つの重要なコンセプトは、「Target-Action Pattern」、「Binding」、そして「Gesture Recognizers」 です。

Target-Action Pattern
=Eventが発生したときに、コントロールがTarget Objectにアクションを送信するModel
Binding
=オブジェクトが別のオブジェクトに状態や変更を通知する仕組み
Gesture Recognizers
=Touch Eventを検出し、応答するメカニズム。

それでは、Swiftの簡単なFoundation Framework(かも)についてご紹介したいと思います。

※「@State private var text」ですが、明日出社しなければならないため、ハードコーディングを行わせていただきます😭。普段はあまりしません(たまにやることはありますが😅)。

共有したコードはこんな感じです。🔥
Target-Action
= これは、Button Viewを使用して実現されます。ボタンがタップされると、アクションがトリガーされ、(この場合は「"Button tapped!"」というメッセージが表示されます)
Button(action: {print("Button tapped!")})

Binding
= @State 変数を UI 要素にバインディングすることで、テキストを更新できます。コードでは、「You entered:」の部分が、入力された内容に応じて動的に更新されます。

Gesture Recognizers
= onTapGestureを使用すると、テキストビューのタップを検出して応答できます。コードでは、タップすると背景色とテキストの内容が変更されます。コードをご覧のとおり、Swiftと他のプログラミング言語のイベントハンドリングの違いはそれほど大きくありません。これは私がActionScriptからSwift(元Objective-C)に移行した方法でございます。

エラーハンドリング (Error Handling)

Swiftのエラーハンドリングは、実行中に予期しない状況が発生した際に、それに適切に対応できるようにする仕組みです。
下記は、よく使われるエラーハンドリングのキーワードです。

Throw
=エラーが発生する可能性がある処理を実行する際に使用する。
Catch
=名前の通り、Throwで発生したエラーをキャッチし、そのエラーを処理するために使用する。
Try
=Throwが発生する可能性がある処理を呼び出す際に使い、エラーが発生した場合にはそれを捕える役割を担う。
Defer
=Throwからのエラーの有無に関係なく、現在のスコープが終了した後に実行したい処理に使用します。

※普段はこのような書き方はしません。こちらはあくまで例文です。
※スコープの終了時に実行される 'defer' ステートメントは常に実行されますので、この時点で do を使うべきです。defer は必要ないため、警告が出てしまいました。とはいえ、例文のために入れているだけです。😅
※スクリーンショットを取った時点では、ボタンはまだクリックされていなかったため、エラーメッセージは表示されていませんでした。

共有したコードはこんな感じです。🔥
do
: エラーをThrowする可能性のあるコードをdoブロック内に記述します。
try
: エラーをThrowする可能性のあるコード「wrongfile.page」の前にtryを使用します。
catch
: Throwされたエラーを処理するために、1つ以上のcatchブロックを使用します。
defer
: エラーがThrowされたかどうかに関係なく、現在のスコープが終了する直前にコードブロックを実行するために使用されます。ただし、共有したコードでは不要になったため、Xcodeから私に警告がThrowされました🤣 。

ActionScriptからObjective-CおよびSwiftに移行した際、この部分は簡単とは言えませんが、それほど難しくもありません。少し理解する時間が必要です。

Swift開発のコード

ここまで読んでいただき、ありがとうございます。
最後に、Swiftの実際の開発はどのようなものかについて見せたいと思います。👨🏻‍💻😅

これは少し上級者向けの内容なので、理解する必要はありません。😅

最後に

私は現在、かなり野心的なプロジェクトに取り組んでおります。それは、Swiftを使ってバックエンドタスクをすべて実行できるSwiftパッケージの開発でございます。😅

このプロジェクトにはかなりの時間がかかりますが、うまくいけば、フロントエンドとバックエンドの喧嘩を解決できると考えております。さらに、QAの段階に入る前に、ITやUATテストをスムーズに実施できるようになります。



Marvelでは今年も『Marvelアドベントカレンダー2024』をやります🎄🎅Marvelのエンジニアがクリスマスまで記事のバトンを繋ぎます🦌🛷
是非毎日のお楽しみとしてご覧ください🎁

★Marvelのアドベントカレンダーはこちら
https://note.com/marvel_engineer/m/ma7e8d8ae4288

Marvelが少しでも気になった方は是非Wantedlyもご覧ください🙌

いいなと思ったら応援しよう!