首页 > 解决方案 > 如何解决返回从协议构建的抽象类的 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?据我了解,协议应该在包含所需属性时转换为抽象类。

标签: c#objective-cxamarin.formsxamarin.ios

解决方案


推荐阅读