如何解决如何对重命名的类进行子类化? / 'MKPinAnnotationView' 在 iOS 15.0 中被弃用:重命名为 'MKMarkerAnnotationView'
MKPinAnnotationView
在 iOS 15 中被重命名为 MKMarkerAnnotationView
。
在 iOS 14 之前,我将 MKPinAnnotationView
子类化为
class MyAnnotationView: MKPinAnnotationView {
// …
}
问题:
如果我的应用编译到 iOS 14,我想声明 MyAnnotationView
如上。
但是如果编译到iOS 15,我必须使用
class MyAnnotationView: MKMarkerAnnotationView {
// …
}
如何实现?
在指令层面,我可以使用类似的东西
if #available(iOS 15,*) {
// iOS 15
} else {
// iOS 14
}
但在班级层面,显然只有类似
@available(iOS 15,*)
class MyAnnotationView: MKMarkerAnnotationView {
如果 iOS 15 可用,似乎可以让我编译一个类,但显然我无法避免编译 class MyAnnotationView: MKPinAnnotationView {
如果 iOS 15 可用。
那么这在 Swift 中是如何处理的?
解决方法
正如 @Paulw11 在其他答案中所指出的,MKMarkerAnnotationView
自 iOS 11
以来一直可用。因此无需在 iOS 15
上使用它。
这部分仍然与其他情况相关,例如 @dfd 在 iOS 14
和更早版本中提到的图像选择器。
虽然没有想象中的那么漂亮,但还是值得一试。
import MapKit
#if canImport(CoreLocationUI) // Hack for iOS 15?
public typealias BaseAnnotationView = MKMarkerAnnotationView
#else
public typealias BaseAnnotationView = MKPinAnnotationView
#endif
class MyAnnotationView: BaseAnnotationView {
}
,
MKPinAnnotationView
尚未重命名。
MKPinAnnotationView
在 iOS 15 中已弃用,但您仍然可以使用它。弃用只是意味着不建议您将其用于新应用,它可能会在未来消失,您不能指望有任何增强。
MKMarkerAnnotationView
从 iOS 11 开始可用,因此除非您的应用面向 iOS 10 或更早版本,否则您只需切换到使用它而不是 MKPinAnnotationView
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。