精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何結合 Core Data 和 SwiftUI

開發 前端
SwiftUI 和 Core Data 之間相差將近十年 —— SwiftUI 隨著 iOS 13 面世而 Core Data 則是 iPhoneOS 3 的產物;很久以前,它還沒有被稱為 iOS,因為 iPad 尚未發布。盡管時間相距遙遠,Apple 還是投入了大量工作以確保這兩種強大的技術能夠完美地相互配合使用,這意味著 Core Data 就像始終以這種方式設計一樣,已集成到 SwiftUI 中。

[[410983]]

本文轉載自微信公眾號「Swift社區」,作者韋弦Zhy 。轉載本文請聯系Swift社區公眾號。

core data stack

SwiftUI 和 Core Data 之間相差將近十年 —— SwiftUI 隨著 iOS 13 面世而 Core Data 則是 iPhoneOS 3 的產物;很久以前,它還沒有被稱為 iOS,因為 iPad 尚未發布。盡管時間相距遙遠,Apple 還是投入了大量工作以確保這兩種強大的技術能夠完美地相互配合使用,這意味著 Core Data 就像始終以這種方式設計一樣,已集成到 SwiftUI 中。

在此項目中,我們將僅使用少量 Core Data 的功能,但是這種功能將很快擴展——我只想首先了解一下它。當您創建 Xcode 項目時,我要求您選中 Use Core Data 框,它應該導致對項目的更改:

  • 現在,您有了一個名為 Bookworm.xcdatamodeld 的文件。這描述了您的數據模型,該數據模型實際上是類及其屬性的列表。
  • AppDelegate.swift 和 SceneDelegate.swift 中現在有用于設置 Core Data 的額外代碼。

設置核心數據需要兩個步驟:創建所謂的持久性容器(從容器存儲中加載并保存實際數據),然后將其注入 SwiftUI 環境中,以便我們所有的視圖都可以訪問它。

Xcode 模板已經為我們完成了這兩個步驟。

因此,剩下的就是我們要決定要在 Core Data 中存儲哪些數據,以及如何讀出這些數據。首先,我們需要打開 Bookworm.xcdatamodeld 并開始使用 Xcode 的模型編輯器描述我們的數據。

之前我們描述過這樣的數據:

  1. struct Student { 
  2.     var id: UUID 
  3.     var name: String 

但是,Core Data 不能那樣工作。您會看到,Core Data 需要提前知道我們所有數據類型的樣子,包含的內容以及它們之間的關系。這就是 “xcdatamodeld” 文件的來源:我們將類型定義為“實體”,然后在其中創建屬性作為“屬性”,Core Data 負責將其轉換為可以在運行時使用的實際數據庫布局。

為了進行試用,請點擊 “Add Entity” 按鈕創建一個新實體,然后雙擊其名稱將其重命名為 “Student”。接下來,單擊 “Attributes”表正下方的+按鈕以添加兩個屬性:“id”作為 UUID 和 “name” 作為字符串。這將告訴 Core Data 創建學生并保存他們所需的一切,因此請回到 ContentView.swift,以便我們編寫一些代碼。

使用獲取請求從 Core Data 中檢索信息——我們描述了我們想要的內容,應如何對其進行排序以及是否應使用任何過濾器,然后 Core Data 會發回所有匹配的數據。我們需要確保該獲取請求隨著時間的推移保持最新,以便在創建或刪除學生時,我們的 UI 保持同步。

SwiftUI 有一個解決方案,而且——您猜對了——這是另一個屬性包裝器。這次將其稱為@FetchRequest,它帶有兩個參數:我們要查詢的實體以及我們希望結果如何排序。它具有非常特定的格式,因此,我們首先為學生添加獲取請求——請立即將此屬性添加到 ContentView:

 

  1. @FetchRequest(entity: Student.entity(), sortDescriptors: []) var students: FetchedResults<Student> 

分解之后,這創建了一個獲取的“學生”實體的請求,不進行任何排序,而是將其放入名稱為students,類型為FetchedResults的屬性中。

從那里開始,我們可以像常規的 Swift 數組一樣開始使用學生,但是您會發現有一個陷阱。首先,一些將數組放入List的代碼:

  1. var body: some View { 
  2.     VStack { 
  3.         List { 
  4.             ForEach(students, id: \.id) { student in 
  5.                 Text(student.name ?? "Unknown"
  6.             } 
  7.         } 
  8.     } 

你發現異常了嗎?是的,student.name是可選的——它可能有一個值,也可能沒有。這是 Core Data 的一個領域,該領域會讓您大為惱火:它具有可選數據的概念,但與 Swift 的可選數據完全不同。如果我們對 Core Data 說“這不是必須的”(您可以在模型編輯器中完成),它仍然會生成可選的 Swift 屬性,因為所有 Core Data 關心的是屬性在保存時具有值——在其他時間它們可以為 nil。

您可以根據需要運行代碼,但沒有太多意義——該列表將為空,因為我們尚未添加任何數據,因此我們的數據庫為空。為了解決這個問題,我們將在列表下方創建一個按鈕,每次點擊都會添加一個新的隨機學生,但是首先我們需要一個新屬性來存儲托管對象上下文。

讓我重申一下,因為這很重要。當我們定義 “Student” 實體時,實際上發生的是 Core Data 為我們創建了一個類,該類繼承自其自身的一個類:NSManagedObject。我們無法在代碼中看到該類,因為它是在構建項目時自動生成的,就像 Core ML 的模型一樣。這些對象之所以稱為托管對象,是因為 Core Data 會照料它們:它從持久性容器中加載它們并將它們的更改也寫回。

我們所有的托管對象都位于托管對象上下文中,該上下文負責實際獲取托管對象以及保存更改等。如果需要的話,您可以有許多托管對象上下文,但這距離現在還有一段路要走——實際上,您可以長期使用它。

我們不需要創建此托管對象上下文,因為 Xcode 已經為我們創建了一個。更好的是,它已經將其添加到 SwiftUI 環境中,這就是@FetchRequest屬性包裝器起作用的原因——它使用了環境中可用的任何托管對象上下文。

因此,現在將此屬性添加到ContentView:

  1. @Environment(\.managedObjectContext) var moc 

設置好之后,下一步是添加一個按鈕,該按鈕生成隨機的學生并將其保存在托管對象上下文中。為了幫助學生脫穎而出,我們將通過創建firstNames和lastNames數組來分配隨機名稱,然后使用randomElement()從中選擇一個。

首先在List下方添加此按鈕:

  1. Button("Add") { 
  2.     let firstNames = ["Ginny""Harry""Hermione""Luna""Ron"
  3.     let lastNames = ["Granger""Lovegood""Potter""Weasley"
  4.  
  5.     let chosenFirstName = firstNames.randomElement()! 
  6.     let chosenLastName = lastNames.randomElement()! 
  7.  
  8.     // more code to come         

**注意:**不可避免地有人會抱怨我強行對randomElement()調用,但是實際上我們只是手工創建了具有值的數組——它將永遠成功。如果您非常討厭強制拆包,則可以將其替換為空合計算和默認值。

現在,有趣的部分是:我們將使用為我們生成的 Core Data 類創建一個 Student對象。這需要附加到托管對象上下文中,以便對象知道應將其存儲在何處。然后,我們可以像通常為結構體那樣分配值。

因此,現在將這三行添加到按鈕的操作閉包中:

  1. let student = Student(context: self.moc) 
  2. student.id = UUID() 
  3. student.name = "\(chosenFirstName) \(chosenLastName)" 

最后,我們需要詢問托管對象上下文以保存自身。這是一個引發函數的調用,因為理論上它可能會失敗。實際上,我們所做的一切都沒有失敗的可能,因此我們可以使用try?來調用它——–我們不在乎捕獲錯誤。

因此,請將最后一行添加到按鈕的操作中:

  1. try? self.moc.save() 

最后,您現在應該可以運行該應用程序并對其進行嘗試——單擊幾次 “Add” 按鈕以生成一些隨機的學生,您應該看到他們滑入我們列表的某個位置。更好的是,如果您重新啟動該應用程序,您會發現學生還在,因為 Core Data 已保存了他們。

現在,您可能認為這需要大量的學習,但并不會帶來很多結果,但是您現在知道什么是實體和屬性,知道什么是托管對象和請求,并且已經了解了如何保存更改。在此項目的后面以及將來,我們都將更多地關注 Core Data,但到目前為止,您已經走了很遠。

 

責任編輯:武曉燕 來源: Swift社區
相關推薦

2013-12-13 09:55:12

SQLite數據庫

2024-05-17 09:01:24

Swift數據模型Core Data

2024-05-17 09:00:45

SwiftUIvisionOS

2015-10-19 11:06:42

CoreDate開源庫

2015-09-02 09:40:21

core data工具開源庫

2011-07-21 14:50:06

Core Data SQL

2011-06-14 14:27:02

Core DataCocoa TouchiOS

2022-09-19 09:01:35

HStackVStackSwiftUI

2012-04-19 10:04:20

ibmdw

2023-05-26 17:21:15

PythonRust

2022-11-11 09:01:08

SwiftUI條形圖子視圖

2011-08-19 17:44:01

2021-08-16 12:13:02

SwiftUIList ArticleList

2024-07-03 09:13:26

SwiftUI修飾符框架

2023-09-20 12:13:47

開發模型

2020-06-02 09:28:46

大數據物聯網IOT

2021-11-26 12:00:07

包裝器SwiftU結構體

2010-08-10 16:41:54

FlexJSP

2019-11-14 09:20:15

CentOS 8RHEL 8Nagios Core

2010-07-27 15:14:35

Flex Datapr
點贊
收藏

51CTO技術棧公眾號

99在线精品视频在线观看| 日韩在线网址| 中文字幕欧美一| 成人av资源| caoporn国产| 日韩在线二区| 精品av综合导航| 天天摸天天碰天天添| 国内精品久久久久国产| 成人动漫精品一区二区| 国产精品久久久久久久久久99| 日本少妇高清视频| 亚洲精品亚洲人成在线| 91麻豆精品国产91久久久| 两根大肉大捧一进一出好爽视频| 午夜在线视频| 99免费精品在线观看| 成人久久一区二区三区| 日日摸天天添天天添破| 午夜久久影院| 色777狠狠综合秋免鲁丝 | 日韩黄色一级片| 欧美精品精品精品精品免费| 波多野结衣家庭教师在线观看| 国产精品对白| 日韩无一区二区| 性欧美videossex精品| 欧美aa免费在线| 亚洲激情一二三区| 中日韩在线视频| 免费国产在线观看| 91一区二区在线| 国产无套精品一区二区| 国产毛片毛片毛片毛片| 免费成人你懂的| 日本中文字幕不卡免费| 日本熟妇毛茸茸丰满| 欧美成人综合| 久久不射电影网| 国产乱子轮xxx农村| 国产欧美日韩精品一区二区免费 | 人人人妻人人澡人人爽欧美一区| 亚洲一区二区电影| 日韩一区二区三区av| 狠狠操狠狠干视频| 亚洲欧美专区| 51精品视频一区二区三区| 天天干天天操天天做| 欧美国产日韩电影| 欧美网站一区二区| 九九热精品在线播放| 国产91在线播放精品| 欧美三级午夜理伦三级中视频| av动漫在线观看| 一区二区电影免费观看| 欧美性xxxxhd| 91av俱乐部| 激情久久一区二区| 欧美日韩国产天堂| 日日干日日操日日射| 在线高清欧美| 日韩精品中文字幕在线不卡尤物 | 国产精品久久国产精麻豆99网站| 午夜精品福利一区二区| 视频一区二区三区不卡| 亚洲天堂av老司机| 99久久99久久精品| 在线观看三级视频| 亚洲福利视频一区二区| 国产精品成人久久电影| 麻豆理论在线观看| 在线一区二区三区四区五区| 视色视频在线观看| 亚洲va欧美va人人爽成人影院| 精品乱码亚洲一区二区不卡| 搡老熟女老女人一区二区| 奇米色欧美一区二区三区| 一区二区三区视频免费| 国产suv一区二区三区| 国语精品一区| 91精品国产免费久久久久久 | 美女的胸无遮挡在线观看| 色88888久久久久久影院野外 | 高清av一区二区| 久久亚洲高清| 麻豆av在线导航| 亚洲国产va精品久久久不卡综合 | 日韩熟女精品一区二区三区| 日韩福利电影在线| 91嫩草免费看| 久草在现在线| 一区二区三区在线高清| 毛片一区二区三区四区| 粉嫩一区二区三区在线观看| 亚洲精品理论电影| 国产精品成人69xxx免费视频| 亚洲午夜一级| 国产欧美日韩综合精品| 婷婷综合激情网| 中文字幕人成不卡一区| 少妇性饥渴无码a区免费| 97色婷婷成人综合在线观看| 日韩电影免费观看在线观看| 国产精品久久久免费看| 欧美一级一区| 99国产高清| 成人免费在线观看| 亚洲h动漫在线| 最新天堂在线视频| 亚洲国产国产| 久久露脸国产精品| 91麻豆视频在线观看| 91免费观看视频在线| 超碰97在线看| 91综合国产| 亚洲欧美中文日韩在线| 麻豆一区二区三区精品视频| 久久99精品国产.久久久久久| 久久久久久国产精品免费免费| 午夜在线激情影院| 欧美老年两性高潮| 三年中国中文观看免费播放| 国产精品日韩久久久| 91精品久久久久久蜜桃| 黄色网页在线看| 欧美三级视频在线播放| 色无极影院亚洲| 国产精品一区亚洲| 国产伦精品一区二区三区免 | 你懂的视频在线| 亚洲va国产天堂va久久en| 国产精品二区视频| 在线中文字幕第一区| 国产主播欧美精品| eeuss影院www在线播放| 在线免费不卡电影| 国产人妻大战黑人20p| 欧美一级播放| 欧美一区二区视频在线| 成人av免费电影网站| 日韩av综合中文字幕| 一区二区三区视频免费看| 成人免费毛片高清视频| 日本午夜激情视频| japanese色系久久精品| 久久久久久亚洲| 日本人妻熟妇久久久久久| 一区二区三区四区激情| 日韩高清一二三区| 国产在线欧美| 国产一区二区三区免费不卡| 国产777精品精品热热热一区二区| 精品国产露脸精彩对白| av资源吧首页| 91视视频在线观看入口直接观看www | 九九精品视频免费| 国模少妇一区二区三区| 日本老太婆做爰视频| 中文字幕日韩高清在线| 久久久亚洲成人| 色视频在线观看福利| 一本一本大道香蕉久在线精品| 舐め犯し波多野结衣在线观看| 日韩福利电影在线| 老汉色影院首页| xvideos.蜜桃一区二区| 68精品国产免费久久久久久婷婷| 人操人视频在线观看| 欧美日韩卡一卡二| a级片在线观看免费| gogogo免费视频观看亚洲一| www一区二区www免费| 日韩极品一区| 不卡一卡2卡3卡4卡精品在| 黄色在线免费观看网站| 亚洲人成欧美中文字幕| 国产乱码久久久| 黄色一区二区在线| 最新日韩免费视频| 国产一区二区三区不卡在线观看| 青青草国产免费| av在线不卡顿| 粉嫩精品一区二区三区在线观看 | 91麻豆精品国产91久久久资源速度 | 性生活在线视频| 香蕉国产精品偷在线观看不卡| 四虎一区二区| 动漫av一区| 国产精品女人网站| 女同一区二区免费aⅴ| 亚洲区中文字幕| 亚洲av永久无码国产精品久久| 精品久久中文字幕久久av| 四虎影视一区二区| 91污在线观看| 交换做爰国语对白| 日韩综合小视频| 国产日韩亚洲欧美在线| 人人狠狠综合久久亚洲婷| yellow视频在线观看一区二区 | 欧洲精品在线观看| 精品小视频在线观看| 国产精品二三区| 久久无码人妻精品一区二区三区 | 最新中文字幕视频| 国产精品一区二区三区网站| 国产精品69页| 亚洲国产专区校园欧美| 999国产精品一区| 亚洲欧美在线免费| xxxx国产精品| 欧美日韩国产高清一区二区| 天天操天天摸天天干| 一区二区在线看| 男人的天堂av网| 91最新地址在线播放| 亚洲国产欧美日韩在线| 青青草国产精品97视觉盛宴| 男人添女人下面高潮视频| 欧美日韩国产欧| 在线一区日本视频| 精品美女久久| 久久久7777| 欧美尿孔扩张虐视频| 国产精品久久久对白| 成人免费91| 91久久久久久国产精品| 国产成人a视频高清在线观看| 欧美有码在线观看| 欧美大胆a人体大胆做受| 欧美—级高清免费播放| 2020国产在线视频| 自拍偷拍亚洲精品| eeuss影院在线播放| 在线视频精品一| 国产黄色在线播放| 亚洲欧美在线免费| 国产女主播在线直播| 亚洲天堂网在线观看| 精品资源在线看| 亚洲欧美一区二区三区四区| 奇米影视888狠狠狠777不卡| 日韩精品免费电影| 日本一二三区在线视频| 亚洲免费精彩视频| 国产一区二区影视| 中文字幕欧美日韩在线| 午夜在线免费观看视频| 久久久国产视频| 中中文字幕av在线| 欧美福利小视频| a级片免费在线观看| 91高潮精品免费porn| 二区三区不卡| 国产精品一区二区久久国产| 日日夜夜精品| 91久久久一线二线三线品牌| 国产91精品入| 欧美极品一区| 日韩国产一区二区三区| 免费观看黄色大片| 韩国在线一区| heyzo国产| 免费成人美女在线观看.| xxxx在线免费观看| 国产69精品久久久久777| 国产精品一区二区人妻喷水| 久久欧美中文字幕| 我不卡一区二区| 亚洲三级电影网站| 国产精品成人免费一区二区视频| 日韩欧美中文免费| 中文字幕在线观看精品| 精品少妇一区二区三区日产乱码 | 精品国产一区av| 韩国日本一区| 国产精品96久久久久久| 亚洲视频自拍| 精品国产一区二区三区麻豆免费观看完整版 | 国产精品乱码久久久久| 九九热在线视频观看这里只有精品| 成人高清在线观看视频| 91视视频在线直接观看在线看网页在线看| 男人的天堂官网| 亚洲一区二区三区在线播放| 无码任你躁久久久久久久| 日韩一区二区在线看| 你懂的视频在线播放| 免费97视频在线精品国自产拍| 亚洲国产成人二区| 91亚洲va在线va天堂va国 | 一区二区三区四区久久| 亚洲毛片av| 国产欧美一区二| 2020国产精品自拍| 欧美精品xxxxx| 欧美羞羞免费网站| 性xxxx视频播放免费| 久久视频在线视频| 黑人巨大精品欧美一区二区桃花岛| 91九色在线视频| 不卡av一区二区| 国产成人无码a区在线观看视频| 九九视频精品免费| 日韩女同一区二区三区| 精品国产乱码久久久久久婷婷 | 日本午夜视频在线观看| 正在播放亚洲一区| 黄上黄在线观看| 97视频在线观看网址| 精品国产三级| 尤物一区二区三区| 久久国产直播| 影音先锋黄色资源| 一区二区在线观看不卡| 美女黄页在线观看| 亚洲欧洲在线视频| 麻豆视频在线观看免费网站黄| 91日韩久久| 91tv精品福利国产在线观看| 日本xxxx黄色| 国产亚洲欧美中文| 在线能看的av| 亚洲级视频在线观看免费1级| 色a资源在线| 91精品国产一区二区三区动漫 | 国产女人爽到高潮a毛片| 国产一区二区三区久久精品 | 一本色道久久综合亚洲精品高清| 九九九九九九九九| 1024国产精品| 国产一区二区三区成人| 在线日韩欧美视频| 国产亚洲精品精品国产亚洲综合| 青青草原亚洲| 爽爽淫人综合网网站| 加勒比综合在线| 91福利在线导航| 爱爱爱免费视频在线观看| 国产精品青青在线观看爽香蕉| 九九在线精品| 一级特黄性色生活片| 中文字幕免费观看一区| 亚洲图片在线播放| 久久国内精品一国内精品| www.成人在线.com| 警花观音坐莲激情销魂小说| 国产麻豆精品95视频| 免费麻豆国产一区二区三区四区| 日韩欧美aaaaaa| 啊啊啊久久久| 欧美一进一出视频| 青草国产精品久久久久久| 一本在线免费视频| 欧美一区二区网站| 大黄网站在线观看| 久久本道综合色狠狠五月| 视频一区欧美精品| 成人三级视频在线观看| 日韩视频一区二区三区 | 午夜成人免费电影| 经典三级在线| 成人欧美一区二区三区黑人| 综合久久精品| 成人性生活免费看| 欧美三级日韩在线| 日本在线视频网址| 蜜桃传媒视频麻豆第一区免费观看| 三级一区在线视频先锋| 亚洲欧美卡通动漫| 精品国产123| 成人短视频app| 中文字幕一区二区三区有限公司 | 99热这里都是精品| 在线视频精品免费| 蜜臀久久99精品久久久久久宅男 | 日韩网站免费观看| 在线播放一区二区精品视频| 97超碰青青草| 国产精品国产三级国产aⅴ中文| 国产成人a人亚洲精品无码| 91精品国产九九九久久久亚洲| 成人综合久久| zjzjzjzjzj亚洲女人| 欧美在线高清视频| 久久国产精品黑丝| 日本在线免费观看一区| 国产精品99久久久久久似苏梦涵| 久久久久久久久影院| 日韩在线视频一区| 秋霞蜜臀av久久电影网免费| 亚洲免费黄色录像| 欧美色道久久88综合亚洲精品| 日本中文字幕视频在线| 久久久水蜜桃| 国产成人在线视频播放| 亚洲 小说区 图片区| 午夜精品福利视频| 亚洲精品一区二区妖精| 亚洲精品乱码久久久久久久久久久久 |