Esri iOS SDK 10.2.5中Feature Layer标记无法显示(Swift迁移后)
我之前在迁移Esri iOS SDK项目到Swift 3.x时也碰到过一模一样的问题——Feature Layer标记突然不显示,排查下来核心就是Swift 2.3到3.x的语法变化导致代理方法签名不匹配,你原来的回调方法根本没被SDK触发,自然不会渲染标记。
问题根源
Esri iOS SDK的代理方法是基于Objective-C实现的,Swift 3+对Objective-C方法的映射规则做了大幅调整:
- 第一个参数的外部参数名会被隐式省略,必须显式添加下划线
_来匹配; - 参数名的映射更贴近Objective-C的选择器逻辑,原方法的
didQueryFeaturesWithFeatureSet会被简化; NSOperation在Swift 3中被重命名为Operation(部分老版本SDK可能仍需用NSOperation,但大部分情况自动映射)。
修正后的方法签名
把你原来的Swift 2.3方法:
func featureLayer(featureLayer: AGSFeatureLayer!, operation op: NSOperation!, didQueryFeaturesWithFeatureSet featureSet: AGSFeatureSet!) { // 原处理逻辑 }
替换为Swift 3.2兼容的版本:
func featureLayer(_ featureLayer: AGSFeatureLayer!, operation op: Operation!, didQueryFeaturesWith featureSet: AGSFeatureSet!) { // 保留你的原有处理逻辑 guard let features = featureSet.features as? [AGSFeature] else { return } // 示例:添加特征并刷新图层 featureLayer.addFeatures(features) featureLayer.refresh() }
额外排查要点
- 确认代理设置:确保你已经给
AGSFeatureLayer的delegate属性赋值为当前类,且当前类遵循AGSFeatureLayerDelegate协议(记得加@objc修饰类,确保Objective-C能识别); - 添加错误回调:补全失败回调方法,排查是否查询本身出错:
func featureLayer(_ featureLayer: AGSFeatureLayer!, operation op: Operation!, didFailQueryFeaturesWithError error: Error!) { print("Feature Layer查询失败:\(error.localizedDescription)") } - 检查查询逻辑:确认迁移后
AGSQuery的参数设置正确,比如whereClause、outFields等属性有没有因为Swift语法变化被错误赋值。
内容的提问来源于stack exchange,提问作者user1474752
相关产品推荐
相关产品推荐

