Swift : スズキの自動車、オートバイも製造しているメーカ故N/Aで良く回りそう。。。ではなくPG言語らしくない紛らわしい名前です。Xcodeのメイン言語、C#/Javaより少しシンプルでちょっとVB6っぽい感じもします。やりたいことからコードの書き方の解説、ゼロからの解説WEB記事は多数ありますが、当方は他言語と違うとこだけ端的知りたい。それらをまとめてみました。
特別な記号や表現
変数の末尾の「 ? 」 | nullを許可するの意。非許可変数間で直接値は渡せないので要注意。逆に? 無し変数でnull判定するとエラーになってしまいます。 |
変数の末尾の「 ! 」 | nullを許可するの意。「 ? 」の違いは理解していませんが、別の型として扱われるとのこと。 |
引数の前の「 _ 」 | 省略が可能な引数を示す。C++のようにデフォルト引数値があるのかは知らないです。 |
関数の「 ) 」に続く「->」 | リターン値の型。世界標準に反しています。C# の「=>」ように特殊なのかと思いましたがそうではなかった。 |
nil | NULL/nullの意。連想つきますがWEB検索すると他の用語が沢山でてきます。 |
@State | 簡単にいうと値が変化するクラスメンバ変数の模様。 |
var | 変数宣言。これはなぜか普通。 |
let | 定数宣言。VB6のLetプロパティとは違う。 |
print()等への改行コード | MAC上で “¥n” では改行コードと扱われず、「\」のキー位置ほ探して「\n」を打つ必要がある。 |
Framework(?)
大きく2つあるようです。100%互換は無いようで、WEB記事を見るときはどちらで書いてあるか確認する必要があります。
SwiftUI | 最近のヤツらしい。標準クラス名が下のとだいぶ違うようです。 |
Swift Storyboard | シナリオっぽいネーミングなので部分機能かと勘違いしています。 |
コード構造(SwiftUI)
- まず画面クラスがStructで始まり困惑する。class と同意と考えてよい模様。
- 行末の「 ; 」はない。
- 画面定義と処理部が混在する構造。
- Namespace はあるのかよくわからない。
- switch は defalut 無いとビルドエラーとなる。
- スクリプト言語っぽいが、文字列に数値を結合するときは明示的に変換( String(数値) )が必要。
- new は無い模様。
- 初期化していないクラスメンバがあると、init() メソッドでエラーがでる。
- GUI名やインスタンスは無い。GUIに@State変数を割当て、その値の変化で動作を作り出す仕組み。
- よって変数値ドリブン的に仕組みとなっている。GUI操作がイベントハンドラ内で書けない場合がある。これに合わせこむため工夫と頭の切り替えが必要。
- クラス仕様がコロコロ変わり、下位互換性を保っくれない。ネット上のコードサンプルの5割は使えないと思っていたほうが模様。
- 旧来自分たちで仕向け専用にGUI操作共通を作込んでいたようなレベルの内容が標準クラス化されている模様。それ故、そのクラス仕様が理解が難しい。そのため何をするにも面倒が多い。
- 結構固まる。固まる時はOSも固まる。Windows98のころを思い出す。
GUI仕様
- ボタンなど画面下に寄せたい場合、Spacerは便利だ。Xamarinには無かったような。
- スクロールバーの幅は変更できない模様。
- iOSではチェックボタンがサポートされていない!
- 一画面のGUI数に制限がある。30個くらいでout!
- 上記数字には、Tableの行列数はふくまれない。
- TextField にmaxLength がない。まじで!!
IDE
総じて、KB配置の制約も含め、Windows PCからクロスプラットフォームで Visual Studio を使う方が効率が高そう。未だ理解不足ですが以下の課題があるようです。
- App Storeからインストールせず、xipをダウンロードすれば、複数のバージョンを1台にインストールできる。シンプルに。Visual Stduio は製品( Ex. 2022) において1つのみ。Androidは小細工すればできたとは思う。
- Visual Studio や Android Studio のように、画面を画面エディタで編集できない。Swiftエディタ側でGUI手入力する必要がある。(X-Windowが出始めの1990頃 OSF/Motif でGUIコードを書いていたころに比べればマシではあるが、、、VC++6時代MFCでも100%ではないが画面エディタで編集できた。イマドキ何故? ) 尚、Visual Studio で Xamarin / .NET MAUI を使用したときも同じ(これはMAC側に合わせたせいかな?)。しかしこっちは画面定義は別ファイル。
- GUIプロパティもSwiftエディタ側で手入力する必要がある。Visual Studio や Android Studio はプロパティウインドウで、全プロパティが表示され、そこを変更することができる。Visual Studio で Xamarin / .NET MAUI を使用した時は、これができるので、MAC上できないことではない。
- まず GUIを選択するToolBox をどこから開くの分からない。画面エディタの少し離れた右上隅の小さな「+」をクリックするのですがこんなの分からない。 Visual Stduioも Adnroid Stduio もメニューや明らかに分かるアイコンやメニュー項目が設置されている。あえて隠している?
![](https://motoplus4.com/blog/wp-content/uploads/2024/04/xcode3-1024x124.png)
- GUIのプロパティが全てプレ表示されない。何のプロパティがあるか別で調べないといけない。
- ポチ「.」入力時の自動メンバ表示は一応ある。メソッドのcallingシーケンスまでは出ない。
- メソッドやプロパティのに、マウスオーバしてもヒント的なも、定数値、型などのが表示されない。
- 標準のメソッドやプロパティのヘルプは、左クリックメニューからメソッドの説明は呼び出せるがマウスを介すため、Visual Studio のF1ヘルプキーよりムダ時間食う。
- iPhone/iPadの実機デバッグ時、プログラムの起動は端末上手動で行う必要がある。Visual Studio For MAC では IDEから起動できる。停止は何故か IDE から可能。
- デバック時の Brakepoint の挙動が不正確。Visual Studio For MAC では正確なので何故。
- デバッグ時の Brakepointするとアセンブラ行で位置づけられる。大昔のVC++みたい。
- Eclipse や Visual Studio と同様に、コード間違いがリアルタイムにエディタに表示されるが、5~10秒遅れる。間違いを直す度に、その遅れ時間分、待たないといけない。さらにムダ時間を食う。
- デバッグ時、 iPad / iPhone とWi-Fiで接続可能。一度USB接続でXcodeに認識させておく必要あり。MACmini で Xcode を動作させ、リモート操作しているとき、手元に端末を置いておけるので便利。Xamarin も出来るようですが Microsoft の説明ページに飛ばされるので、読むのが面倒なので控えてしまいます。
- デバックでBreakして再開するとき、普通に右▲を押すとアプリ再起動されてしまう。メニューにはContinueがあるが、スタートとポーズが別ならポーズボタンを用意すべき。
- 画面ビューアがコケことが多々。表示のとても遅く負荷も高そう。、グルグル状態も多い。不必要時は非表示にしておいたほうが良い。
- クラスリファレンスがブラウザでないのはよい。昔のMSDNドキュメントみたい。
- 日本語化されていない。分かってはいてもやはり目に入りにくい。
- vi modeが標準装備されている。VS for MACのプラグインは日本語入力が狂うが、こちらは割と大丈夫。 vi modeは対応しているのは基本操作程度で未対応が多い。
- : w (上書き) 使えず
- :行数(行ジャンプ) 使えず
- .(繰返し)使えず。これは大問題。
- yw (ワードコピー)は使えたものの Word数yw (ワード数指定コピー)はできない。
- undo( u と r )がとち狂う。
- 行末でyw (ワードコピー)すると改行コードも一緒にコピーされる。本来VIと違う。
- 検索 / にて上下keyでヒストリができない。
- 日本語変換結果がキャッシュに残留して、狂ってときおり出てくる。
- i + Tab 入力したとき、””で囲った特定文字列があると、そちらにFOCUSが移動し、タブ入力ができない。これは完全にバグだ。
- コードに不都合があるとBuildエラーとならず、が途中でダンマリとなる場合がある。
- 品質的には20年前のVisual Stdioのようだ。
気付いた制限バグなど
- i + Tab 入力したとき、””で囲った特定文字列があると、そちらにFOCUSが移動し、タブ入力ができない。
- Xcode 14.3 (Xamarinの最終互換版) は、MAC OS 14 では「最新バージョンにしてください」と怒られる。普通は上位互換あるハズ。まだVS2010でもWIn11で動くが、、、
- Xcode 15.1(MAUIの’24.5月時点での互換版) では、色テーマがエディタ部しか変わらない。
Xcode / swift は本体の開発体制的な問題か、設計ポリシーかは不明です。しかし Xcode / swift はMACに無料でついてくるという差ではプライベータには有益。(とおもったがAndroid Studio もフリーだ)
中々慣れを要します… 随時更新中です。