Swift : Xcode
links
github
- あらかじめPreferences... -> AccountsでGitHubのアカウントを登録しておく。
- 作ったプロジェクトファイルからは、Source Control -> Create Git Repositories... でリポジトリを作成できる。
- ファイルを変更するとファイルにMマークが付く。
- Commit...でコミットするファイルを選択し、メッセージを入力し、コミット。
- それからPush...すればコミットされたファイル群がリモートレポジトリにプッシュされる。
- リモートの変更をダウンロードするにはPull...。
coding
- @IBOutlet weak var someProperty : someClass! // 弱い関連付け。オプショナル型。
- storyboardを表示しているviewの上のバーの左端にある「三」からassistantを選択すると、viewの右にそのクラスに関連したソースコードが出てくる。左のviewの項目をCTRLを押下しながらクリックしてソースコード上にドラッグすると、ソース内にIBOutletが挿入される。(Xcode11でIBOutlet)
- connections inspector(右に表示される)の丸印からソースに直接ドラッグすることもできる。
- ソースからアウトレットを削除してもアイテム内のコネクションは残る。こちらは個別に削除する必要がある様子。
新しい知見
- Storyboard上の操作で分かったが、Application SceneのApplicationに属するApp Delegateと、Window controller sceneに属するApp Delegateは別インスタンスらしい。少なくともAppDelegate.swift上に定義したIBOutletに、それぞれのsceneで別のインスタンスを登録することができる。
- NSViewControllerのサブクラスのクラスメソッド内でselfをNSTextViewにdelegateとして追加しようとすると、textView.delegate = selfではエラーが出る。これはself as? NSTextViewDelegateで回避できるが、extensionとして当該クラスにNSTextViewDelegateプロトコルを追加すれば解決できる。
textView.delegate = self (ViewController内)
///
extension ViewController : NSTextViewDelegate {
// something.
}
その他
- KEditをAppleのサンプルエディタを元に改修中。
- データはプレーンテキスト。
- データ担体としてContentクラスを定義して中身をcontentString(String)とする。
- TextViewのdelegateをViewControllerに設定。TextViewからは設定できなかったため、ViewControllerの"Show the Connections Inspector"のnew referencing outputからTextViewにドラッグ。delegateを選択すると設定された。
- TextViewのデータをContentにリンクするため、"Show the Binding Inspector"のValueをViewControllerにバインド。(Bind toのチェックボックスをチェック)
- この際、Continuously Updates Value にもチェックしておく。
- Info.plistのDocument Types設定では、標準でidentifierだけでなくNameでもファイル形式の判定が行なわれている。例えば拡張子*でname=another file, identifier=public.plain-textでは任意にならないが、identifierを""とすると全てのファイルが対象となる。ただしname=public.plain-textやpublic.htmlとすると任意にならない。適合判定の部分に手を加える必要があるかも。
public.itemと指定すると全てのファイルが選択可能だが、public.contentでは一部のファイルのみとなる。これはなんだろうな…
- Swiftとオブジェクト間の通知のパターン
- 文字列からセレクターを生成する場合の注意。
Selectorで文字列からメソッドを呼び出す(Swift4.2)
Swiftではセレクタに対応するメソッドがないと実行時エラーとなるため事前にチェックが必要。引数が必要な場合についても説明あり。
let selector = #selector(testAction())
perform(selector)
@objc private func testAction() {
print("testAction")
}
動作
- ビルド時間の表示: https://developers.cyberagent.co.jp/blog/archives/7815/
"defaults write com.apple.dt.Xcode ShowBuildOperationDuration YES"
と指定することでビルド時間が表示されるようになる。
- Build Active Architecture Only
Debug時はYESにしておく。