iOS 15 和 Swift 5.5 的新特性
在 Worldwide Developers Conference 21 上,Apple 克服了许多限制,宣布了一些面向开发者的重要功能。Apple 确保在 iOS 15 和 Swift 5.5 中引入新功能时,每个开发人员都可以用最少的时间和精力构建最好的交互式应用程序。在这篇博文中,我们将了解一些已引入的新功能,并了解如何在我们的代码中实现它们。
iOS 15 和 Swift 5.5 的新特性
1.UISheetPresentationController
Apple 在 WWDC 21 中提供了一些新的 API 改进来呈现底部表单。在 iOS 14 中,他们引入了这个,但它没有任何自定义,但是从 iOS 15 开始,我们可以将 apple maps 实现为高度更小的 bottom sheet。它具有高度调整等自定义功能,在工作表顶部添加了一个抓取器。
UIViewController 有一个名为的新属性sheetPresentationController; 你可以展示底页。我们可以访问sheetPresentationController获取实例的属性UISheetPresentationController用于自定义其外观。
@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,动画:真,完成:无)
}
在这里,我们可以使用止动器来调整底板的高度。它有 2 个值 .large() 和 .medium()。.large() 将显示全屏高度 & .medium() 将占据屏幕高度的一半。在这里,我们传递了一个定位器数组,所以首先,它会显示在屏幕高度的一半,然后我们可以将它拖动到全屏。
在这里,我们在工作表的顶部添加了一个抓取器,因此用户可以了解如何拖动它。
显示底部工作表时,其后面的视图会自动变暗;如果你想阻止它,你可以将largestUndimmedDetentIdentifier的值设置为.medium。
如果您的底部工作表具有可滚动的内容,我们可以将prefersScrollingExpandsWhenScrolledToEdge设置为false,这样它就不会向下滚动并使用抓取器;您可以拖动工作表并全屏显示。
我们也可以使用 preferredCornerRadius 设置底部工作表的角半径。
想要敬业且技能高超的 iOS 开发人员吗?
联系最好的移动开发公司:Bacancy,聘请 iOS 开发人员并开始构建出色的移动应用程序。
2.UI菜单
iOS 14 引入了 UIMenu,但是如果你想添加子菜单,在 iOS 14 中是不可能的。所以,iOS 15 引入了 UIMenu 并添加了 SubMenu。
使用 UIMenu,我们可以创建菜单的实例;它有一个名为 children 的参数,可以采用 UIMenu 和 UIAction 数组。
UIAction 将标题、图像、属性、状态和处理程序作为其参数。
UIMenu 采用标题、图像、选项、处理程序和其他参数。UIAction 中的状态用于显示复选标记以显示选择。UIMenu 中的选项用于显示菜单的显示方式。它有 3 个值 .displayInline、.destructive、.singleSelection。在 UIMenu 中使用 .singleSelection 或 .destructive 选项,我们可以显示子菜单。使用 .singleSelection 时,它只允许在菜单或子菜单中选择 1 个项目。
@IBAction func menuAction(_ sender : UIButton) {
让更多= UIMenu(标题:“更多”,图像:UIImage(系统名称:“省略号”),选项:.singleSelection,孩子们:[
UIAction(title: "Share", image: UIImage(systemName: "square.and.arrow.up"), handler: { _ in }),
UIAction(title: "Save", image: UIImage(systemName: "folder"), handler: { _ in }),
UIAction(标题:“编辑”,图像:UIImage(系统名称:“铅笔”),状态:.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])
}
长按按钮,显示菜单;如果你想通过点击按钮打开菜单,你可以使用属性showsMenuAsPrimaryAction。
3. CLLocationButton
在 iOS 13 中,引入了新的位置权限,只能访问一次。因此,每当用户尝试访问该位置时,它都会请求许可。在 iOS 15 中,Apple 改进了该功能。他们默认提供位置按钮 UI。所以,第一次它会请求用户许可。每当用户再次打开该应用程序时,用户只需单击位置按钮,它就可以访问当前位置,而无需请求权限提示。
如果用户第一次拒绝权限,当用户下次点击位置按钮时,它会在不请求权限提示的情况下授予对当前位置的访问权限。一旦授予位置访问权限,即使应用程序在后台,它也会获取位置数据。一旦用户或系统终止应用程序,位置数据访问将过期。
4.异步/等待
Swift 5.5 使用 async/await 引入了并发系统的变化。并发意味着同时运行多个代码块。顾名思义,如果它是同步的,它是一种编写复杂异步代码的方法。对于 async/await 有两个步骤要执行:使用 async 关键字创建一个函数并使用 await 关键字调用它。async 表示异步;我们可以将它添加为方法属性。
要调用此方法,我们需要在方法调用之前使用 await 关键字并将其添加到异步上下文 Task 中。
在引入 async/await 之前,我们使用闭包完成块,Result主要是在 Web 服务调用中。从 swift 5.5 开始,我们可以将 async/await 用于异步代码,而无需完成处理程序来返回值。我们可以直接将这些值分配给它们各自的变量。在函数调用中使用 await 关键字将停止进一步的代码执行,直到响应到来。
要在执行异步代码时执行更多代码,您可以在变量之前保留 async 关键字,并在访问其结果时等待关键字。
如果我们想并行调用多个异步函数,我们也可以使用 async/await 来实现。
异步让 numbersInt = generateRandomNumbersInt()异步让 numbersDouble = generateRandomNumbersDouble()让 numbers = await [numbersInt, numbersDouble] as [Any]打印(数字)
对于错误处理,在 async/await 中,我们可以使用 Result或尝试/抓住。
5. Double & CGFloat 可互换类型
从 swift 5.5 开始,您可以互换使用Double 和 CGFloat而无需转换它们。
您可以对Double 和 CGFloat执行操作,并可以在 Double 中获得结果。
输出:
6. 因地制宜
惰性关键字允许我们定义将在首次使用时初始化的存储属性。从 Swift 5.5 开始,您现在可以在本地上下文中使用 lazy 关键字。
func printGreetingMethod(to: String) -> String {
print("在 printGreetingMethod()")
返回“嘿,\(到)”}func lazyInLocal() {
print("懒惰调用之前")
懒惰的 var greetingLazy = printGreetingMethod(to: "jena")
print("懒惰调用后")
打印(问候懒惰)}
输出:
结论
随着 iOS 15 和 Swift 5.5 中新功能的引入,应用程序开发的挑战性降低了,结果也更加稳健。轻量级和直接的语法加上强大的模式匹配让 iOS 开发者的开发变得更好。
言鼎科技主做软件开发,微信小程序,网站开发,软件外包,手机APP开发。如有需要记得联系我们!
还没有评论,来说两句吧...