版本記錄
版本號 | 時(shí)間 |
---|---|
V1.0 | 2019.07.04 星期四 |
前言
每年的WWDC開發(fā)者大會都是科技圈的重大事件驮履,都會得到全世界的關(guān)注鱼辙,前幾年有時(shí)候會熬夜看,今年沒有熬夜看玫镐,我還是看回放吧倒戏,有時(shí)間也就總結(jié)了下,權(quán)當(dāng)整理和了解吧恐似。感興趣的看下面幾篇文章杜跷。
1. 蘋果大會(一) —— 2018年6月(一)
2. 蘋果大會(二) —— 2018年9月(一)
3. 蘋果大會(三) —— 2019年6月(一)
WWDC 2019 Top 10 Videos
首先看下寫作環(huán)境
Swift 5, iOS 13, Xcode 11
有關(guān)最新API的視頻,如ARKit 3矫夷,RealityKit葛闷,SwiftUI,Combine
和iPad上的多窗口支持双藕。還有更多的覆蓋工具淑趾,如Catalyst,Xcode 11忧陪,Swift Package Manager扣泊,Accessibility Inspector
和Simulator
近范。有超過100個(gè)會話視頻,你從哪里開始旷赖?
不要害怕顺又! 這里已經(jīng)收集了年度十大視頻列表供觀看。
注意:要在更短的時(shí)間內(nèi)觀看更多視頻等孵,我們建議您從WWDC視頻站點(diǎn)WWDC Videos Site下載視頻稚照,然后使用
VLC Media Player
或QuickTime Player
以1.5x
或2.0x
速度重播它們。
1. Platforms State of the Union – Session 103
Platforms State of the Union
始終是一個(gè)開始的地方俯萌。它提供了Apple在WWDC剩余會話中涵蓋的許多新功能的概述果录。如果你沒有別的時(shí)間,這是值得關(guān)注的咐熙!
今年的演講重點(diǎn)介紹了三個(gè)方面的變化:
-
1) Developer Productivity:這里的重大新聞是
SwiftUI
弱恒,以及Swift
和Xcode
的新支持。-
SwiftUI
是新玩具中最閃亮的棋恼,下面將詳細(xì)介紹返弹。 -
Xcode
在支持實(shí)時(shí)開發(fā),實(shí)時(shí)預(yù)覽爪飘,新編輯器布局义起,改進(jìn)文檔,測試計(jì)劃等方面進(jìn)行了重大改進(jìn)。 - 對Swift的更改為
Xcode
和GitHub Package Registry
中的Swift包帶來了ABI
和Module
穩(wěn)定性以及一流的支持。
-
-
2) Platforms:除了
SwiftUI
之外秋冰,每個(gè)平臺上都有大量新功能。-
macOS Catalina
包含Catalyst
齐蔽,它簡化了將iPad應(yīng)用程序引入Mac的過程。 Apple還在這個(gè)新版本中將系統(tǒng)volume
設(shè)置為只讀床估,將系統(tǒng)提供的位與用戶應(yīng)用程序和數(shù)據(jù)分開含滴,以提高安全性和可靠性。 -
watchOS 6
聲明獨(dú)立于phone
∏曛希現(xiàn)在可以在沒有配套iOS應(yīng)用程序的情況下為手表構(gòu)建應(yīng)用程序蛙吏。 -
iOS 13
帶來了可用性功能,如快速鍵盤和新的UI功能鞋吉,如暗模式鸦做,共享表,卡片谓着,語義顏色泼诱,自適應(yīng)材料和新的符號庫。 -
iPadOS
包括新的iPad特有功能赊锚,如改進(jìn)的多任務(wù)處理治筒,窗口場景屉栓,PencilKit
和新手勢。
-
-
3) Core Technologies:與往常一樣耸袜,今年對每個(gè)平臺上的核心API進(jìn)行了大量改進(jìn)友多。
-
Accessibility
:Apple在今年WWDC期間主要關(guān)注Accessibility
,以鼓勵開發(fā)人員更多地關(guān)注它堤框。它們使accessibility
功能更易于用戶發(fā)現(xiàn)域滥。并且,他們實(shí)現(xiàn)了語音控制蜈抓,它使用設(shè)備上的語音識別和一些專門的命令來實(shí)現(xiàn)設(shè)備的完全免提操作启绰。 -
Privacy
:Core Location
現(xiàn)在允許用戶選擇允許應(yīng)用僅使用一次位置信息。此外還有“Sign in with Apple”
服務(wù)沟使,該服務(wù)允許應(yīng)用程序使用現(xiàn)有的Apple ID
注冊用戶委可。 -
Machine Learning
:Apple
擴(kuò)展了現(xiàn)有Vision
,Natural Language
和Speech ML
框架的功能腊嗡。這些新功能允許應(yīng)用程序判斷圖像顯著性着倾,執(zhí)行文本識別,在設(shè)備上處理語音等等燕少。CoreML
包括對100多種新模型層類型的支持屈呕,現(xiàn)在允許對模型進(jìn)行設(shè)備內(nèi)個(gè)性化。 -
Siri
:Siri Shortcuts
現(xiàn)在是會話式的棺亭,允許他們處理參數(shù)。 -
AR
:ARKit 3
可同時(shí)使用相機(jī)蟋软,人物遮擋和動作捕捉镶摘。RealityKit
和Reality Composer
提供了一種將AR功能集成到應(yīng)用程序中的簡單方法。 -
Metal
:iOS Simulator
現(xiàn)在完全支持Metal應(yīng)用程序岳守。
-
2. Great Developer Habits – Session 239
即使蘋果今年給我們帶來了所有令人難以置信的閃亮新玩具凄敢,本次會議也是我們團(tuán)隊(duì)認(rèn)為對您來說最重要的一次。它綜合了與世界各地開發(fā)人員進(jìn)行的多次對話的結(jié)果湿痢,并為將日常工作流程中的許多習(xí)慣融入其中而提供了理由涝缝。
講座將這些習(xí)慣分為八類:
- 1) Organize:保持
project
和workspace
清潔。這意味著使用Xcode
組譬重,故事板引用和新的構(gòu)建系統(tǒng)拒逮。它意味著將警告視為錯(cuò)誤,而不是將其檢入臀规。 - 2)Track:始終使用源代碼管理滩援。使您的提交變小并且本地化。寫
GOOD
提交消息塔嬉。把它們想象成你未來的自我玩徊。 - 3)Document:再次思考你未來的自我租悄,寫下評論,回答你為什么以你的方式實(shí)施某些事情的問題恩袱。出于同樣的原因編寫API文檔泣棋。
- 4)Test:編寫單元測試。去做就對了畔塔。并確保您實(shí)際使用它們潭辈。
- 5)Analyze:使用Xcode提供的工具,如
Network Link Conditioner, the debug gauges and Instruments
俩檬。使用sanitizers and checkers
萎胰,只要有可能就將它們打開。 - 6)Evaluate:進(jìn)行代碼審查棚辽。如果您是獨(dú)立開發(fā)人員技竟,請找人幫忙。了解每個(gè)變化屈藐。build它榔组。運(yùn)行測試。校對联逻。
- 7)Decouple:使用包和框架將代碼分解為更容易維護(hù)的部分搓扯。這樣做可以更輕松地?cái)U(kuò)展或共享代碼。但是包归,這意味著文檔是至關(guān)重要的锨推。
- 8)Manage:管理您的依賴項(xiàng)。了解他們對用戶數(shù)據(jù)的處理方式公壤。如果他們破裂或消失换可,請制定計(jì)劃。并且對于它們包含的每個(gè)依賴性都知道相同厦幅。
3. Introducing SwiftUI: Building Your First App – Session 204
SwiftUI: Less code. Better code. Everywhere.
這是蘋果公司對SwiftUI
的口頭禪沾鳄,而不僅僅是營銷炒作。在某些方面确憨,SwiftUI
對于開發(fā)人員而言可能比Swift本身的引入更具革命性译荞。本次會議介紹了這個(gè)新框架,并展示了從頭開始構(gòu)建應(yīng)用程序休弃。它強(qiáng)調(diào)了SwiftUI的強(qiáng)大功能以及開發(fā)用戶界面的新方法吞歼。
當(dāng)然,在一次會議中可能無法涵蓋這么大的內(nèi)容玫芦。一旦你看到這個(gè)浆熔,你還有五個(gè)可以讓你真正開始了解如何讓SwiftUI
為你工作。按順序,它們是:
- 1) SwiftUI Essentials – Session 216
- 2) Data Flow Through SwiftUI – Session 226
- 3) Integrating SwiftUI – Session 231
- 4) Building Custom View with SwiftUI – Session 237
- 5) SwiftUI On All Devices – Session 240
即便如此医增,這并不是所有可用的SwiftUI
內(nèi)容慎皱。關(guān)于accessibility
和watchOS
支持等主題的會議有很多。利用下載這些會話的幻燈片的功能叶骨。你會一遍又一遍地參考它們茫多。
4. Modern Swift API Design – Session 415
本次會議介紹了一些設(shè)計(jì)Swift-only API
的新興最佳實(shí)踐。 既然Swift
提供了ABI(Application Binary Interface)
和模塊穩(wěn)定性忽刽,那么最終可以完全在Swift中構(gòu)建系統(tǒng)框架天揖。 SwiftUI
和RealityKit
是兩個(gè)閃亮的例子。
Swift API
設(shè)計(jì)的總體指導(dǎo)原則與2016年Apple首次發(fā)布其Swift API
指南時(shí)的整體指導(dǎo)原則相同:使用時(shí)的清晰度跪帝。 雖然這顯然意味著必須明確命名今膊,但這也意味著必須明確使用。
該會話討論了在值和引用語義之間進(jìn)行選擇的最佳實(shí)踐伞剑,或兩者的混合斑唬,例如寫時(shí)復(fù)制值語義。 它繼續(xù)討論協(xié)議和泛型的適當(dāng)使用黎泣,并識別常見的濫用情況恕刘。
最后,它展示了動態(tài)密鑰路徑成員查找和屬性包裝器如何協(xié)同工作以啟用SwiftUI
使用的一些很酷的新功能抒倚。
5. What’s New in Xcode 11 – Session 401
本次會議展示并演示了許多Xcode 11
的新功能褐着。它首先演示完全重新考慮編輯器啟用的新工作流程。 Xcode現(xiàn)在擁有盡可能多的獨(dú)立編輯器托呕,每個(gè)編輯器都有自己的模式和內(nèi)容含蓉。畫布和助理編輯器將合并到編輯器窗格中,并僅在有要顯示的內(nèi)容時(shí)顯示项郊。垂直和水平分割您的工作區(qū)多次谴餐。
Xcode 11
現(xiàn)在還提供Swift Package Manager
的完全集成。 Swift包是class citizens
呆抑,無論是在Xcode還是在流行的存儲庫中,如GitHub汁展,GitLab
和Bitbucket
鹊碍。從CocoaPods
遷移到SwiftPM
再簡單不過了!
該會議還涵蓋了其他Xcode改進(jìn)的大雜燴食绿,包括Git stash
和cherry-pick
侈咕,故事板中的Mac設(shè)備支持,目錄中資產(chǎn)的本地化器紧,環(huán)境覆蓋耀销,更好地跟蹤儀器中的os_signpost
日志記錄等等。
6. Introducing Combine – Session 722
本次會議介紹了新的Combine
框架铲汪。用Apple的話來說熊尉,Combine是“一個(gè)統(tǒng)一的罐柳,聲明性的API,用于隨著時(shí)間的推移處理值狰住≌偶”第三方反應(yīng)式編程框架的粉絲會說,“但是催植,我們已經(jīng)擁有了這個(gè)肮蛹!”,Combine
令人興奮的是它不是第三方框架创南。作為基本操作系統(tǒng)的一部分伦忠,您最終可以獲得許多異步編程問題的聲明性解決方案。
Combine
以發(fā)布者稿辙,訂閱者和運(yùn)營商的角度來思考昆码。正如您所料,發(fā)布者是值的來源邓深,并定義了如何生成值和錯(cuò)誤未桥。訂閱者向Publishers
注冊以接收這些值。運(yùn)營商充當(dāng)發(fā)布者和訂閱者芥备,轉(zhuǎn)換從發(fā)布者接收的值并將其向下游發(fā)送到訂閱者冬耿。操作員的這種“雙重身份”使他們能夠被鏈接在一起以處理更復(fù)雜的數(shù)據(jù)流。
Combine
提供了許多預(yù)定義的運(yùn)算符萌壳,Apple
稱之為Declarative Operator API
亦镶。這些運(yùn)算符分為功能區(qū)域,如轉(zhuǎn)換袱瓮,列表操作缤骨,錯(cuò)誤處理,線程或隊(duì)列移動尺借,以及時(shí)間和調(diào)度绊起。
與SwiftUI
一樣,關(guān)于Combine
還有更多關(guān)于適合一個(gè)會話的內(nèi)容燎斩。一旦您準(zhǔn)備好使用Combine做更多事情虱歪,請觀看會話721,Combine in Practice栅表。而且笋鄙,如果您是“反應(yīng)性”編程的新手,請準(zhǔn)備好多次觀看這些會話怪瓶!
7. Advances in UI Data Sources – Session 220
任何使用UITableView
或UICollectionView
編寫過許多應(yīng)用程序的人幾乎肯定遇到過數(shù)據(jù)模型與UI不同步時(shí)出現(xiàn)的可怕崩潰萧落。即使你很幸運(yùn)沒有看到這次崩潰,你也遇到了讓它們保持同步并對UI進(jìn)行增量更新的困難。
本次會議介紹了一種新方法:可擴(kuò)展數(shù)據(jù)源找岖。這些工作通過使用新的三步過程:創(chuàng)建快照陨倡,填充該快照,調(diào)用apply()
宣增。這很簡單玫膀!
快照中的數(shù)據(jù)項(xiàng)由唯一的持久標(biāo)識符標(biāo)識,而不是由IndexPaths
標(biāo)識爹脾。有效標(biāo)識符的唯一要求是它必須是唯一的帖旨,并且必須符合Hashable
。由于使您自己的Swift結(jié)構(gòu)值滿足這些要求是微不足道的灵妨,因此可以直接使用模型值解阅,而不是根據(jù)標(biāo)識符查找它們。這可以大大簡化您的代碼泌霍。
由于許多table view and collection view
委托方法仍然通過IndexPath
引用單元格货抄,因此有一個(gè)API
可以在IndexPath
和identifier
之間進(jìn)行轉(zhuǎn)換。
一旦您使快照反映了數(shù)據(jù)模型的新狀態(tài)朱转,您可以通過調(diào)用apply()
將更新放在屏幕上蟹地。系統(tǒng)負(fù)責(zé)處理插入和刪除操作,同時(shí)提供流暢的自動動畫藤为。當(dāng)然怪与,如果用戶體驗(yàn)過這種動畫,您可以禁用動畫缅疟。最重要的是分别,你可以在后臺線程上調(diào)用apply()
!唯一的限制是您必須始終在后臺線程或主線程上調(diào)用它存淫。
8. What’s New in Swift – Session 402
自去年6月WWW 2018
年以來耘斩,Apple已經(jīng)完成并發(fā)布了Swift 5.0
,并且Swift 5.1
作為Xcode 11
的一部分處于測試階段桅咆。本演講重點(diǎn)介紹了Swift在過去一年中的一些變化括授。
最重要的新功能之一是ABI
- 應(yīng)用程序二進(jìn)制接口 - Swift 5.0
中的穩(wěn)定性。這允許程序使用與構(gòu)建程序本身的編譯器不同的編譯器構(gòu)建的框架岩饼。 Swift 5.1引入了模塊穩(wěn)定性刽脖,使Swift模塊和導(dǎo)入它們的程序能夠使用不同的編譯器版本構(gòu)建。這使得捆綁框架和Swift運(yùn)行時(shí)與操作系統(tǒng)相匹配 - 與Objective-C存在的世界狀態(tài)相匹配 - 從而提供更小的二進(jìn)制文件和更快的應(yīng)用程序啟動忌愚。
將Swift運(yùn)行時(shí)與操作系統(tǒng)一起使用也可以獲得其他性能優(yōu)勢。現(xiàn)在却邓,Apple可以優(yōu)化橋接所謂的貨幣類型 - 常見類型(如字符串和字典)硕糊,從而顯著提高橋接性能。
Swift 5.0
改變了編譯器表示字符串的方式;它們現(xiàn)在編碼為UTF-8而不是UTF-16。如果您依賴于String的基礎(chǔ)表示简十,則可能在您自己的代碼中遇到過此問題檬某。此更改允許與C API更簡單的互操作性,因?yàn)樽址辉傩枰D(zhuǎn)換螟蝙。它還允許在String
和NSString
類型之間更快地進(jìn)行橋接恢恼,從而提高整體應(yīng)用程序性能。例如胰默,由于這種變化场斑,SwiftNIO
的吞吐量增加了20%
。
該會議還討論了工具改進(jìn)牵署,例如SourceKit
中官方支持的Docker鏡像和Language Server Protocol (LSP)
支持漏隐。它還介紹了一些已經(jīng)批準(zhǔn)或正在審核的新語言功能,這些功能可以實(shí)現(xiàn)一些很酷的新技術(shù)奴迅,例如Swift UI
青责。
9. Adopting Swift Packages in Xcode – Session 408
如上所述,Xcode 11
現(xiàn)在支持使用Swift Package Manager(SPM)
來管理外部開源軟件包的依賴關(guān)系取具。本次會議首先演示了向Xcode項(xiàng)目添加依賴項(xiàng)是多么容易脖隶。
與其他依賴關(guān)系管理器類似,SPM
使用清單形式來定義包暇检。對于SPM产阱,該清單是一個(gè)名為Package.swift
的文件。除此文件外占哟,程序包還包含Sources
目錄和Tests
目錄心墅,每個(gè)目錄包含程序包定義的每個(gè)目標(biāo)的其他目錄。源可以用Swift榨乎,C怎燥,C ++和Objective-C的任何組合編寫。默認(rèn)情況下蜜暑,包構(gòu)建為靜態(tài)庫并直接鏈接到生成的應(yīng)用程序可執(zhí)行文件中铐姚。
Swift Package Manager
使用語義版本控制semantic versioning來實(shí)現(xiàn)包的版本控制。這提供了在包解析期間的邏輯肛捍,智能版本選擇隐绵。 SPM使用修飾符.upToNextMajor(from :)
和.upToNextMinor(from :)
來控制版本選擇。 Xcode在其對話框中暴露了同樣的能力拙毫。
更新到最新的合格軟件包版本更簡單:單個(gè)菜單命令依许。如果您熟悉從命令提示符使用SPM
,則與執(zhí)行swift
包更新相同缀蹄。版本控制的神奇之處在于一個(gè)名為Package.resolved
的文件峭跳,其中SPM記錄了它解析的每個(gè)包的確切版本膘婶。您應(yīng)該確定并將此文件檢入您的源代碼管理系統(tǒng),以確保您團(tuán)隊(duì)中的每個(gè)成員都使用相同的版本蛀醉。
如果要創(chuàng)建自己的包悬襟,請查看會話410, Creating Swift Packages拯刁。
10. Introducing Sign In with Apple – Session 706
Sign In with Apple
是一項(xiàng)新服務(wù)脊岳,使您的應(yīng)用程序能夠?yàn)槟挠脩籼峁┖喕膸粼O(shè)置。它允許您的用戶點(diǎn)擊一個(gè)按鈕垛玻,快速批準(zhǔn)您請求的信息割捅,并通過Apple進(jìn)行身份驗(yàn)證。您可以獲得極佳的隱私夭谤,出色的安全性 - 通過雙因素身份驗(yàn)證確保登錄安全 - 以及經(jīng)過驗(yàn)證的電子郵件地址棺牧,所有這些都基本上不會對您起作用。
將Sign In with Apple
集成到您的應(yīng)用程序中包括四個(gè)步驟:
- 1) 配置并顯示按鈕朗儒。有幾種款式和外觀可供選擇颊乘。
- 2) 當(dāng)您的用戶點(diǎn)擊按鈕時(shí),創(chuàng)建并發(fā)送授權(quán)請求醉锄。您可以在此處指定所需的其他信息乏悄,例如全名或電子郵件。
- 3) 回應(yīng)驗(yàn)證回調(diào)恳不。您會收到許多不同的數(shù)據(jù)項(xiàng)檩小,包括一個(gè)獨(dú)特,穩(wěn)定的用戶ID和一個(gè)“真實(shí)用戶指示器”烟勋,可以讓您高度自信地表明該用戶是真人而非機(jī)器人规求。使用此信息在您的應(yīng)用中配置帳戶。
- 4) 響應(yīng)授權(quán)狀態(tài)的變化卵惦。
該會話還向您展示了如何最好地用戶登錄阻肿,不僅使用新按鈕,還使用現(xiàn)有的iCloud鑰匙串密碼(如果存在)沮尿。如果您的應(yīng)用要求用戶注冊帳戶丛塌,則值得花時(shí)間觀看此會話并研究幻燈片以實(shí)現(xiàn)最友好的用戶體驗(yàn)。
還值得注意的是畜疾,Sign In with Apple
可以作為JavaScript
庫使用赴邻,因此您可以將其集成到您可能支持的任何非Apple平臺中。
11. LLDB: Beyond “po” – Session 429
該會話解釋了在調(diào)試程序時(shí)用于顯示值的三種不同的LLDB
命令啡捶。 po
是我們在嘗試在Xcode中調(diào)試程序時(shí)學(xué)習(xí)的第一個(gè)命令姥敛。它打印指定變量的對象描述。系統(tǒng)運(yùn)行時(shí)提供默認(rèn)對象描述瞎暑,但您可以通過使類型符合CustomDebugStringConvertible
來自定義它彤敛。
po
的參數(shù)可以是任何可編譯的東西忿偷。該命令實(shí)際上生成了代碼片段,這些代碼片段使用嵌入式編譯器編譯并在程序的上下文中執(zhí)行臊泌。它將結(jié)果包裝在另一個(gè)函數(shù)中以獲取描述。該描述就是它所展示的內(nèi)容揍拆。
接下來渠概,就是p
∩┧可以將其視為“沒有對象描述的打印(print without the object description)
”播揪。它與第一個(gè)po
結(jié)果的效果相同。在進(jìn)行某種類型的分辨率后筒狠,它會將結(jié)果傳遞給相應(yīng)的格式化程序猪狈。 LLDB
為許多常見數(shù)據(jù)類型提供格式化程序,因此它們的表示符合我們在控制臺中的預(yù)期辩恼。
檢查LLDB中的值的第三種方法是v
命令雇庙。這是frame variable
命令的別名,它不編譯和執(zhí)行代碼灶伊。這使得它很快但意味著它不使用與調(diào)試程序的源語言相匹配的語法荚恶。
通過演示定制或補(bǔ)充內(nèi)置數(shù)據(jù)格式化程序的方法來結(jié)束會話蹂季。并且,它提醒人們,Xcode 11
中的LLDB版本現(xiàn)在使用Python 3
而不是Python 2
作為其腳本引擎呻畸。
12. Advances in Collection View Layout – Session 215
這是一個(gè)bonus video
在iOS 6中引入集合視圖(collection views)
時(shí),它們?yōu)楦鼜?fù)雜的UI設(shè)計(jì)打開了大門于樟。 它們的強(qiáng)大之處在于collection view layout
务冕,它將呈現(xiàn)和處理用戶交互與item
的實(shí)際放置分開。 雖然Apple提供了一個(gè)基于行的布局引擎--UICollectionViewFlowLayout
- 構(gòu)建任何更復(fù)雜的東西都需要編寫自定義布局類翘贮。
但是赊窥,自定義布局很難正確。 它涉及許多樣板代碼择膝,可能很難確笔那恚快速的性能。 正確地布置補(bǔ)充和裝飾視圖看起來像黑魔法肴捉。 并且腹侣,嵌套collection views
以創(chuàng)建您的設(shè)計(jì)師所需的滾動行為可能涉及許多late night制定適當(dāng)?shù)膮f(xié)調(diào)。
Compositional Layout to the Rescue!
今年新推出的是UICollectionViewCompositionalLayout
和NSCollectionViewCompositionalLayout
齿穗,它提供了一種在Apple所有平臺上創(chuàng)建布局的全新方式傲隶。 采用compositional
布局時(shí),您可以從較小的單元構(gòu)建布局窃页,構(gòu)建更大的組件跺株,直到完成布局為止复濒。
從概念上講,有四個(gè)級別的構(gòu)建塊:items
被收集到groups
中乒省,這些組被收集到各個(gè)sections
中巧颈,這些部分被收集到最終layout
中。Groups
本身就是項(xiàng)目袖扛,允許您嵌套它們砸泛。 可以使用閉包來定義布局,該閉合按需銷售部分蛆封,允許您在單個(gè)集合視圖中混合完全不同的布局策略唇礁。
這個(gè)新的布局引擎還有很多東西。 該會話提供了一個(gè)可下載的演示應(yīng)用程序惨篱,說明了構(gòu)建許多復(fù)雜布局是多么容易盏筐。 觀看會話后,一定要理解和使用它砸讳!
后記
本篇主要講述了2019年6月蘋果發(fā)布會相關(guān)的幾個(gè)視頻琢融。