c# - 如何解决返回从协议构建的抽象类的 iOS 绑定解决方案接口属性
问题描述
我已经为我的 Xamarin.forms iOS 项目构建了一个 iOS 绑定解决方案,在 Objective-c 代码上使用 Sharpie 绑定,并且已经到了可以编译我的绑定解决方案并且可以在我的 iOS 项目中引用的地步。然而,我对如何处理接口的属性感到困惑,接口的类型是从 iOS 绑定解决方案中的协议创建的抽象类。
在绑定解决方案中创建的接口及其属性示例
// @interface ThermaLib : NSObject
[BaseType(typeof(NSObject))]
interface ThermaLib
{
//-(NSArray<id<TLDevice>>*) deviceList;
[Export("deviceList")]
TLDevice[] DeviceList { get; }
//other properties
}
从协议构建的抽象类的示例
// @protocol TLDevice <NSObject>
[Protocol, Model]
[BaseType(typeof(NSObject))]
public interface TLDevice
{
// @required @property (readonly, nonatomic, strong) NSString * manufacturerName;
[Abstract]
[Export("manufacturerName", ArgumentSemantic.Strong)]
string ManufacturerName { get; }
//other properties
}
尝试调用 ThermaLib.DeviceList 将导致成员访问异常,因为 TLDevice 是一个抽象类。尝试创建一个继承 TLDevice 的类并将 ThermaLib.DeviceList 更改为继承类的类型会导致绑定解决方案不再可编译,并出现以下错误“找不到命名空间名称‘inheritedDevice’的类型”。尝试将 ThermaLib.DeviceList 强制转换为继承的类也会导致成员访问异常。
应该如何在我的 iOS 绑定解决方案中编辑 ThermaLib.DeviceList 以避免调用抽象类的问题?Sharpie 绑定是否错误地翻译了 TLDevice?据我了解,协议应该在包含所需属性时转换为抽象类。
解决方案
推荐阅读
- npm - 将环境变量作为参数传递给 npm 脚本的跨平台方式
- python - ImportError:没有名为 pandas_datareader 的模块
- python - 如何卸载python3.5并重新安装python3.7
- r - 在 R 中使用“mapvalues”时出错,因为我的数据没有匹配的元素
- sql - psql 列不存在,但确实存在
- html - 如何在 html 对话框中嵌入谷歌脚本(gs)内容
- php - Foreach 数组中的数据列表 - 递增数字
- java - 正则表达式或拆分以获取 Java 中的数据
- php - PHP从次要单位格式化多种货币
- java - 如何获得静态 Firebase 值