[Swift]swiftログ(3)
22479 ワード
alert dialog
例を見てみましょう
@IBAction func addButtonPressed(_ sender: UIBarButtonItem) {
let alert = UIAlertController(title: "Add New Todoey Item", message: "", preferredStyle: .alert)
var textField = UITextField()
let action = UIAlertAction(title: "Add Item", style: .default) { action in
self.itemArray.append(textField.text!)
// 새로운 element를 추가한 뒤 반드시 reload를 해줘야 한다.
self.tableView.reloadData()
}
//alert dialog에 textfield 추가
alert.addTextField { alertTextField in
alertTextField.placeholder = "Create new item"
textField = alertTextField
}
//위에서 정의한 action을 dialog에 추가
alert.addAction(action)
//정의가 끝난 alertdialog를 현재 viewcontroller에 추가
present(alert, animated: true, completion: nil)
}
UserDefaultに関する小さな常識
」Table Viewにおけるユニット状態管理の注意事項
Table Viewで再利用可能ユニットを使用する場合の注意点
Table View Data SourceメソッドのtableView.DequeueReusableCellメソッドを使用してCellを整理すると、下にスクロールしてビューから消えたセルが再使用され、最初にこのリソース効率のために存在したのがReusableCellです.
各セルに新しいUItableViewCellオブジェクトを割り当てる場合は、スクロール時に設定をリセットします(e.g.checked accersey).
ビューから消えた瞬間にdealloce->が破壊されるからです.
したがって、セルではなくセルを含むデータに基づいて設定を表示および維持する必要があります.
NSCoderを使用してデータを保存する(レッスン246~248)
iOSのローカルデータストレージ
For small datas
For big datas (Database solution)
AppDelegateのプロパティへのアクセス
(UI Application.shared.delegate as!AppDelegate).
UIApplication.shared<-現在のアプリケーションオブジェクトを単一インスタンスモードで読み込みます.
UIApplication.shared.delegate<-現在のアプリケーションオブジェクトのエージェント.AppDelegate!
Core Dataの概念と使用方法
Core Dataはsqlite dbベースのフレームワークであり、データを永続化コンテナに格納することができる.DBやAPIだけでなく、ローカルデータストレージのほか、さまざまな用途があります.
Core dataはcontextを介してアプリケーションとpersistent storeを接続します.現在の情報の変化状態をcontextに適用し、必要に応じてcontextを適用します.save()が呼び出されると、現在のコンテキストの情報はコアデータに保持されます.簡単に言えばcontextはGitのstaging area,contextである.save()はcommitと理解できる.
Good References
https://zeddios.tistory.com/987<-概念と簡単な実践
https://velog.io/@leeesangheee/Core-Data-%EC%82%AC%EC%9A%A9%ED%95%B4-CRUD-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0<-CURDの簡単な例
個人リポジトリ、API、フレームワーク
フレームワーク:開発時によく使用される機能を一度に提供し、フレームワークをそのままキャプチャするソフトウェア
ライブラリ:機能タイプまたは用途別に定義されたAPIまたは関数の集合.
API:プログラムとプログラムをつなぐブリッジ.
フレームワークとライブラリの違い:コードを制御するのは誰ですか?
ライブラリ:私はコードするとき、必要なときだけライブラリをインポートして、勝手に使います.
フレーム:フレーム定義のルールに従ってコードを作成します.フレームワーク定義のルールは、正式なドキュメントで従う必要があります.
Core DataのQuery(NSPredication)
extension ToDoListViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
//create request by Explicitly declaring request type (제네릭스 사용해서 명시하라고)
let request: NSFetchRequest<Item> = Item.fetchRequest()
// make a query. More info at https://academy.realm.io/posts/nspredicate-cheatsheet/
let predicate = NSPredicate(format: "title CONTAINS[cd] %@", searchBar.text!)
request.predicate = predicate
// 정렬 방식도 지정해줄 수 있음.
let sortDescriptor = NSSortDescriptor(key: "title", ascending: true)
request.sortDescriptors = [sortDescriptor]
// Now, fetch the request to our context!
do {
itemArray = try context.fetch(request)
} catch {
print("Error fetching data from context \(error)")
}
}
}
NSPredicate Cheatsheet
https://academy.realm.io/posts/nspredicate-cheatsheet/
⭐️⭐️⭐️ Realm
https://www.mongodb.com/realm<-MongoDB Realm公式サイト
https://www.mongodb.com/docs/realm/tutorial/ios-swift/<-Reamswift公式ドキュメント
https://github.com/realm/realm-swift <- RealmSwift GitHub
https://velog.io/@yoonjong/Swift-Realm-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0->単純CRUD例
」Deprecateの文法!
@Persistedで置換@objc dynamic
リンクオブジェクトinit構文の変化
昔
class User: Object {
@objc dynamic var _id: ObjectId = ObjectId.generate()
@objc dynamic var _partition: String = ""
@objc dynamic var name: String = ""
// A user can have many tasks.
let tasks = List<Task>()
override static func primaryKey() -> String? {
return "_id"
}
}
class Task: Object {
@objc dynamic var _id: ObjectId = ObjectId.generate()
@objc dynamic var _partition: String = ""
@objc dynamic var text: String = ""
// Backlink to the user. This is automatically updated whenever
// this task is added to or removed from a user's task list.
let assignee = LinkingObjects(fromType: User.self, property: "tasks")
override static func primaryKey() -> String? {
return "_id"
}
}
今、今class User: Object {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var _partition: String = ""
@Persisted var name: String = ""
// A user can have many tasks.
@Persisted var tasks: List<Task>
}
class Task: Object {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var _partition: String = ""
@Persisted var text: String = ""
// Backlink to the user. This is automatically updated whenever
// this task is added to or removed from a user's task list.
@Persisted(originProperty: "tasks") var assignee: LinkingObjects<User>
}
Realmファイルの検索
アプリケーションを起動すると、appdelegateにコード
print(Realm.Configuration.defaultConfiguration.fileURL)
を入れると、絶対パスがコンソールに表示され、プレーヤーでcmd+shift+gを押してパスに移動します.realmファイルを開くといいです.Realmファイルの読み込み
Realm Browserを使用します.realmファイルを開くと、次のメッセージが表示されます.
このようなことを避けるためには、Realm BrowserバージョンのRealm Studioをこのリンクから直接ダウンロードと書くだけでよい.
Chameleon Framework
様々な色やコントラストを簡単に適用できるtextcolorのフレームワークです.
リンク:https://github.com/wowansm/Chameleon/tree/swift5
注意事項:swift 5以上でトランスフォーマーを使用する場合は、Podfileにブランチ名を正しく記入してください.
pod 'ChameleonFramework/Swift', :git => ' https://github.com/wowansm/Chameleon.git' ,
:branch => 'swift5'
これによりpodが正常にインストールされます.
」」Navigation bar colorを各ページに変更した場合
通常、viewDidLoad()にコードを記述してナビゲーションバーの色を変更するだけでよいと考えられますが、実際に実行するとコードは動作しません.
viewのロードは完了しましたが、ナビゲーションコントローラのナビゲーションスタックに現在の画面が表示されていない可能性があります.
そのため、ViewControllerのライフサイクルでは、画面に表示される前のViewWillAppear関数を拡大し、色を変更する必要があります.
💡 Tip. iOS 13からナビゲーションコントローラまで?navigationBar.BarTintColorではなくコントローラをナビゲートしますか?navigationBar.背景色
Swift Access Levels Keywords
次のキーワードを使用して、変数/関数のアクセスレベルを決定します.
1.private:このクラスでのみ使用できます.
2.fileprivate:同じファイル(i.e.同じ.swiftファイル)でのみ使用できます.
3.内部:現在のアプリケーションでのみ使用できます.swiftで変数/関数が宣言された場合defaultは内部
4.public:他のアプリケーションでも使用できます.Cocoapodsなどの他のアプリケーションで使用できる関数/変数を記述します.
5.open:共通のアプリケーションと似ていますが、他のアプリケーションではサブクラスを上書きすることで変数/関数を変更できます.
guard let VS if let
動作に大きな違いはないのでConventionで推測すればいいです.
Guard letは言ったように、絶対にnilが発生しないOptionalを開くために使われています.そのため,guard letのelse部分にfatalErrorのようなものを加え,現在の論理に重大な問題があることを開発者に知らせるためによく用いられる.
これに対して、悪いプレイヤーは同じボタンを何度もクリックしたり、ストリームにnilが現れたりして、nilが現れてもあまり問題のない部分は主にif letを使用します.
もちろんif letもguard letも同じ動作ができるのは重要な部分ではありませんが、この習慣でコードの毒性を高めることができると思います.
Reference
この問題について([Swift]swiftログ(3)), 我々は、より多くの情報をここで見つけました https://velog.io/@manpkh95/Swift-스위프트-일지-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol