You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:51:37