iOS 15 和 Swift 5.5 的新特性

言鼎科技 2023-06-16 436

在 Worldwide Developers Conference 21 上,Apple 克服了許多限制,宣布了一些面向開發(fā)者的重要功能。Apple 確保在 iOS 15 和 Swift 5.5 中引入新功能時(shí),每個(gè)開發(fā)人員都可以用最少的時(shí)間和精力構(gòu)建最好的交互式應(yīng)用程序。在這篇博文中,我們將了解一些已引入的新功能,并了解如何在我們的代碼中實(shí)現(xiàn)它們。

iOS 15 和 Swift 5.5 的新特性

1.UISheetPresentationController

Apple 在 WWDC 21 中提供了一些新的 API 改進(jìn)來(lái)呈現(xiàn)底部表單。在 iOS 14 中,他們引入了這個(gè),但它沒(méi)有任何自定義,但是從 iOS 15 開始,我們可以將 apple maps 實(shí)現(xiàn)為高度更小的 bottom sheet。它具有高度調(diào)整等自定義功能,在工作表頂部添加了一個(gè)抓取器。

UIViewController 有一個(gè)名為的新屬性sheetPresentationController; 你可以展示底頁(yè)。我們可以訪問(wèn)sheetPresentationController獲取實(shí)例的屬性UISheetPresentationController用于自定義其外觀。

iOS 15 和 Swift 5.5 的新特性
@IBAction func openSheetAction(_ sender : UIButton) {
       
       如果讓 bSheet = bottomSheet.sheetPresentationController {
           bSheet.detents = [.medium(), .large()]
           bSheet.prefersGrabberVisible = true
           bSheet.largestUndimmedDetentIdentifier = .medium
           bSheet.prefersScrollingExpandsWhenScrolledToEdge = false
           bSheet.preferredCornerRadius = 30.0
       }
       目前(bottomSheet,動(dòng)畫:真,完成:無(wú))
}

在這里,我們可以使用止動(dòng)器來(lái)調(diào)整底板的高度。它有 2 個(gè)值 .large() 和 .medium()。.large() 將顯示全屏高度 & .medium() 將占據(jù)屏幕高度的一半。在這里,我們傳遞了一個(gè)定位器數(shù)組,所以首先,它會(huì)顯示在屏幕高度的一半,然后我們可以將它拖動(dòng)到全屏。

iOS 15 和 Swift 5.5 的新特性

在這里,我們?cè)诠ぷ鞅淼捻敳刻砑恿艘粋€(gè)抓取器,因此用戶可以了解如何拖動(dòng)它。

iOS 15 和 Swift 5.5 的新特性

顯示底部工作表時(shí),其后面的視圖會(huì)自動(dòng)變暗;如果你想阻止它,你可以將largestUndimmedDetentIdentifier的值設(shè)置為.medium。

iOS 15 和 Swift 5.5 的新特性
bSheet.largestUndimmedDetentIdentifier = .medium

如果您的底部工作表具有可滾動(dòng)的內(nèi)容,我們可以將prefersScrollingExpandsWhenScrolledToEdge設(shè)置為false,這樣它就不會(huì)向下滾動(dòng)并使用抓取器;您可以拖動(dòng)工作表并全屏顯示。

iOS 15 和 Swift 5.5 的新特性
bSheet.prefersScrollingExpandsWhenScrolledToEdge = false

我們也可以使用 preferredCornerRadius 設(shè)置底部工作表的角半徑。

iOS 15 和 Swift 5.5 的新特性
bSheet.preferredCornerRadius = 30.0

想要敬業(yè)且技能高超的 iOS 開發(fā)人員嗎?
聯(lián)系最好的移動(dòng)開發(fā)公司:Bacancy,聘請(qǐng) iOS 開發(fā)人員并開始構(gòu)建出色的移動(dòng)應(yīng)用程序。

2.UI菜單

iOS 14 引入了 UIMenu,但是如果你想添加子菜單,在 iOS 14 中是不可能的。所以,iOS 15 引入了 UIMenu 并添加了 SubMenu。

使用 UIMenu,我們可以創(chuàng)建菜單的實(shí)例;它有一個(gè)名為 children 的參數(shù),可以采用 UIMenu 和 UIAction 數(shù)組。

UIAction 將標(biāo)題、圖像、屬性、狀態(tài)和處理程序作為其參數(shù)。

UIMenu 采用標(biāo)題、圖像、選項(xiàng)、處理程序和其他參數(shù)。UIAction 中的狀態(tài)用于顯示復(fù)選標(biāo)記以顯示選擇。UIMenu 中的選項(xiàng)用于顯示菜單的顯示方式。它有 3 個(gè)值 .displayInline、.destructive、.singleSelection。在 UIMenu 中使用 .singleSelection 或 .destructive 選項(xiàng),我們可以顯示子菜單。使用 .singleSelection 時(shí),它只允許在菜單或子菜單中選擇 1 個(gè)項(xiàng)目。

iOS 15 和 Swift 5.5 的新特性
@IBAction func menuAction(_ sender : UIButton) {
       
       讓更多= UIMenu(標(biāo)題:“更多”,圖像:UIImage(系統(tǒng)名稱:“省略號(hào)”),選項(xiàng):.singleSelection,孩子們:[
           UIAction(title: "Share", image: UIImage(systemName: "square.and.arrow.up"), handler: { _ in }),
           UIAction(title: "Save", image: UIImage(systemName: "folder"), handler: { _ in }),
           UIAction(標(biāo)題:“編輯”,圖像:UIImage(系統(tǒng)名稱:“鉛筆”),狀態(tài):.on,處理程序:{_in})
       ])
       
       讓 destruct = UIAction(title: "Delete", image: UIImage(systemName: "trash"), attributes: .destructive) { _ in }
       
       讓 disable = UIAction(title: "Standard", image: UIImage(systemName: "sun.max"), attributes: .disabled) { _ in }
       
       btnMenu.menu = UIMenu(title: "", children: [more, destruct, disable])
   }

iOS 15 和 Swift 5.5 的新特性

長(zhǎng)按按鈕,顯示菜單;如果你想通過(guò)點(diǎn)擊按鈕打開菜單,你可以使用屬性showsMenuAsPrimaryAction。

iOS 15 和 Swift 5.5 的新特性
btnMenu.showsMenuAsPrimaryAction = true

3. CLLocationButton

在 iOS 13 中,引入了新的位置權(quán)限,只能訪問(wèn)一次。因此,每當(dāng)用戶嘗試訪問(wèn)該位置時(shí),它都會(huì)請(qǐng)求許可。在 iOS 15 中,Apple 改進(jìn)了該功能。他們默認(rèn)提供位置按鈕 UI。所以,第一次它會(huì)請(qǐng)求用戶許可。每當(dāng)用戶再次打開該應(yīng)用程序時(shí),用戶只需單擊位置按鈕,它就可以訪問(wèn)當(dāng)前位置,而無(wú)需請(qǐng)求權(quán)限提示。

如果用戶第一次拒絕權(quán)限,當(dāng)用戶下次點(diǎn)擊位置按鈕時(shí),它會(huì)在不請(qǐng)求權(quán)限提示的情況下授予對(duì)當(dāng)前位置的訪問(wèn)權(quán)限。一旦授予位置訪問(wèn)權(quán)限,即使應(yīng)用程序在后臺(tái),它也會(huì)獲取位置數(shù)據(jù)。一旦用戶或系統(tǒng)終止應(yīng)用程序,位置數(shù)據(jù)訪問(wèn)將過(guò)期。

iOS 15 和 Swift 5.5 的新特性 iOS 15 和 Swift 5.5 的新特性

4.異步/等待

Swift 5.5 使用 async/await 引入了并發(fā)系統(tǒng)的變化。并發(fā)意味著同時(shí)運(yùn)行多個(gè)代碼塊。顧名思義,如果它是同步的,它是一種編寫復(fù)雜異步代碼的方法。對(duì)于 async/await 有兩個(gè)步驟要執(zhí)行:使用 async 關(guān)鍵字創(chuàng)建一個(gè)函數(shù)并使用 await 關(guān)鍵字調(diào)用它。async 表示異步;我們可以將它添加為方法屬性。

iOS 15 和 Swift 5.5 的新特性
func generateRandomNumbers() async -> [Int] {
       
       (1...100).map { _ in
           Int.random(in: 1...100)
       }
}

要調(diào)用此方法,我們需要在方法調(diào)用之前使用 await 關(guān)鍵字并將其添加到異步上下文 Task 中。

iOS 15 和 Swift 5.5 的新特性
func showNumbers() {
       任務(wù){(diào)
           讓 numbers = await generateRandomNumbers()
           打印(數(shù)字)
       }}

在引入 async/await 之前,我們使用閉包完成塊,Result主要是在 Web 服務(wù)調(diào)用中。從 swift 5.5 開始,我們可以將 async/await 用于異步代碼,而無(wú)需完成處理程序來(lái)返回值。我們可以直接將這些值分配給它們各自的變量。在函數(shù)調(diào)用中使用 await 關(guān)鍵字將停止進(jìn)一步的代碼執(zhí)行,直到響應(yīng)到來(lái)。

要在執(zhí)行異步代碼時(shí)執(zhí)行更多代碼,您可以在變量之前保留 async 關(guān)鍵字,并在訪問(wèn)其結(jié)果時(shí)等待關(guān)鍵字。

iOS 15 和 Swift 5.5 的新特性
異步讓數(shù)字 = generateRandomNumbers()打?。ǖ却龜?shù)字)

如果我們想并行調(diào)用多個(gè)異步函數(shù),我們也可以使用 async/await 來(lái)實(shí)現(xiàn)。

iOS 15 和 Swift 5.5 的新特性
異步讓 numbersInt = generateRandomNumbersInt()異步讓 numbersDouble = generateRandomNumbersDouble()讓 numbers = await [numbersInt, numbersDouble] as [Any]打?。〝?shù)字)

對(duì)于錯(cuò)誤處理,在 async/await 中,我們可以使用 Result或嘗試/抓住。

iOS 15 和 Swift 5.5 的新特性
讓 result = await generateRandomNumbersInt()
       切換結(jié)果{
           案例.成功(_):
               休息
           案例.失?。╛):
               休息
}
iOS 15 和 Swift 5.5 的新特性
做 {
           讓結(jié)果 = 嘗試等待 generateRandomNumbersInt()
           打?。ńY(jié)果)
} 抓住讓 e {
           打印(e)
}

5. Double & CGFloat 可互換類型

從 swift 5.5 開始,您可以互換使用Double 和 CGFloat而無(wú)需轉(zhuǎn)換它們。

您可以對(duì)Double 和 CGFloat執(zhí)行操作,并可以在 Double 中獲得結(jié)果。

iOS 15 和 Swift 5.5 的新特性
讓 varCgFloat: CGFloat = 40讓 varDouble: Double = 80讓結(jié)果 = varCgFloat + varDouble打印(結(jié)果)

輸出:

iOS 15 和 Swift 5.5 的新特性

6. 因地制宜

惰性關(guān)鍵字允許我們定義將在首次使用時(shí)初始化的存儲(chǔ)屬性。從 Swift 5.5 開始,您現(xiàn)在可以在本地上下文中使用 lazy 關(guān)鍵字。

iOS 15 和 Swift 5.5 的新特性
func printGreetingMethod(to: String) -> String {
       print("在 printGreetingMethod()")
       返回“嘿,\(到)”}func lazyInLocal() {
       print("懶惰調(diào)用之前")
       懶惰的 var greetingLazy = printGreetingMethod(to: "jena")
       print("懶惰調(diào)用后")
       打?。▎?wèn)候懶惰)}

輸出:

iOS 15 和 Swift 5.5 的新特性

結(jié)論

隨著 iOS 15 和 Swift 5.5 中新功能的引入,應(yīng)用程序開發(fā)的挑戰(zhàn)性降低了,結(jié)果也更加穩(wěn)健。輕量級(jí)和直接的語(yǔ)法加上強(qiáng)大的模式匹配讓 iOS 開發(fā)者的開發(fā)變得更好。

言鼎科技主做軟件開發(fā),微信小程序,網(wǎng)站開發(fā),軟件外包,手機(jī)APP開發(fā)。如有需要記得聯(lián)系我們!

The End