ios - 检查类型并转换为具体类型以进行功能签名

标签 ios swift casting

我有以下代码,感觉可以改进。具体来说,我想摆脱转换和强制转换。多边形具有以下类型签名:
let polygon: MKShape & MKGeoJSONObject

switch polygon {
case is MKMultiPolygon:
    let multiPoly = polygon as! MKMultiPolygon
    renderer = MKMultiPolygonRenderer(multiPolygon: multiPoly)
case is MKPolygon:
    let polygon = polygon as! MKPolygon
    renderer = MKPolygonRenderer(polygon: polygon)
default:
    fatalError("Should have had a renderer")
}

最佳答案

您应该保持切换方法,并使用case let将对象转换为适当的类型:

switch polygon {
case let object as MKMultiPolygon:
    renderer = MKMultiPolygonRenderer(multiPolygon: object)
case let object as MKPolygon:
    renderer = MKPolygonRenderer(polygon: object)
default:
    fatalError("Should have had a renderer")
}

关于ios - 检查类型并转换为具体类型以进行功能签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60106392/

相关文章:

ios - 如何为 UICollectionView 启用缩放

ios - Swift:Firebase:如何确保除了我的应用程序之外没有人可以访问我的数据库

ios - 删除行时,编辑操作部分忽略 UITableViewRowAnimation 设置

PHP7 : Methods with a scalar type declaration refuse to type juggle NULL values, 即使在弱/强制模式下

java - 多次类型转换

ios - 如何修复 "nw_connection_receive_internal_block_invoke"(控制台)

iphone - 动画开始但似乎没有继续

ios - 在 Swift 的屏幕上的列中显示数组中的字符串?

iphone - iphone 中的 DatePicker 不显示年份(swift)

java - 如何在 Java 中将 float 转换为整数