環境
macOS:Catalina 10.15.6
Xcode:12.0
Swift:5.3
筆者について
趣味でswift
を勉強中の只のエンジニアです。仕事では全く使っていません。
swift
は2015年頃に一度勉強していて、最近再燃して勉強し直しています。
1.Stack Viewの制約がうまくつけられない
spacing
の値に0以外の値が入っていると制約に影響が出てしまうようなので、
spacing
には0を入力した方が良いです(制約に影響が出ない箇所なら可)。
2.新しいクラスを作成しプロトコルを継承すると、警告が出る。
Cannot declare conformance to 'NSObjectProtocol' in Swift;
と言って怒られます。
この場合、import Foundation
した上で、NSObject
を継承すれば解決です。
私の場合、import Foundation
を削除した上で試行錯誤していたので、大変でした。
3.ビルドエラー
Multiple commands produce XXX
が発生。
詳しく見るとTarget [アプリ名] has copy command from XXX
とTarget [アプリ名] has link command with output XXX
が発生。
少し調べてみると何かが衝突しているようだった。.swift
ファイルをXCode
上で手動コピーしたのがまずかったのかと思う。
よく分からなかったので、プロジェクトを作り直すことで解決した。
XXX.swift
とMain.storyboard
をFinder
上で、旧プロジェクトフォルダから新プロジェクトフォルダへコピーすることで解決した。
Main.storyboard
の場所が一瞬分からなかったが、Finder
上では.../[アプリ名]/[アプリ名]/Base.Iproj/
の中にある。
4.オブジェクトを比率で上手いこと調整したい(高さ40%のTableViewなど)
こちらのサイトが参考になります。
5.テキストが改行されない
改行コードを入れて任意の箇所で改行させたいが、改行されない。
¥n
ではどうも効かないようで、\n
と入力する必要があった。
\
はoption
キーを押しながら¥
を押下で入力できる。
6..swift
ファイルへOutlet
接続、Action
ができない
遷移先など新しくViewController
を作成し、最初からあるViewController
と同じようにびよーんと接続をしようとしたが、Object
項目がExit
しか選択できない。
Storyboard
上で対象のViewController
を選択。
Identity Inspector
のCustom Class
からViewController
に対応するクラスを選択する。
(画像は修正後)
7.TableView
を外出しできない
ViewController
の肥大化を防ぐ為、UITableViewDelegate
、UITableViewDataSource
を継承したクラスを別途作成し、そのクラスに処理を委譲することができる。
この場合、気をつける点がある。
委譲する先のクラスのインスタンスはviewDidLoad()
の外で生成する必要がある。
まあ、少し考えてみれば当然だが。
委譲先をViewController
(自分)にする場合は、viewDidLoad()
の中でインスタンス生成しても問題なく動く。
本題とずれるが、タイミングなどの問題でインスタンス生成をviewDidLoad()
の中でやりたい場合(何かの処理の後にしたい場合)、viewDidLoad()
の外側で変数宣言だけしておき、viewDidLoad()
の中で代入すれば問題ない。
8.ビルド時にCommand CompileAssetCatalog failed with a nonzero exit code
が発生
私の場合複数の画像ファイルを使用しており、数十枚程度ならエラーは出なかったが、ある1枚のファイルを追加するとエラーが発生、という事象が発生した。
調べても原因が分からなかった(OS
とXCode
は最新化したら解決するという記事もあったが解決しなかった)。
ひとつ心当たりがあって、png
ファイルをjpg
に変換した画像をAssets.xcassets
に追加していたのがマズいのではないかと思い、そのままpng
で保存すると、大丈夫なようだった。
使用している画像ファイルが多く、最終的に解決しているか不明である為、参考程度にして頂きたい。