从Objective-C分配/初始化Swift对象

时间:2017-09-19 12:48:50

标签: ios objective-c swift initialization allocation

我正在开发一个应用程序,我正在获取API响应并需要从中创建对象并将其放入数组中以便稍后使用。 API调用是在Objective-C中进行的,但是我的新对象是在Swift中创建的(它是一个主要使用Objective-C代码的旧应用程序)。

API调用本身工作正常,但是当我尝试将对象转换为对象时,没有制作对象。

这是目标代码(Swift):

import Foundation

@objc
class GCBOKSProductInfo: NSObject, NSCoding {

var featureName: String = ""
var available: Bool = false

static let sharedInstance = GCBOKSProductInfo()

override init() {
    super.init()
}

init(featureName: String, available: Bool) {
    super.init()

    self.featureName = featureName
    self.available = available
}

convenience required init?(coder decoder: NSCoder) {
    guard let featureName = decoder.decodeObject(forKey: "featureName") as? String
        else { return nil }

    self.init(
        featureName: featureName,
        available: decoder.decodeBool(forKey: "available")
    )
}

func encode(with aCoder: NSCoder) {
    aCoder.encode(featureName, forKey: "featureName")
    aCoder.encode(available, forKey: "available")
}

}

以下是我尝试从API响应中创建对象的地方:

NSMutableArray * result = [NSMutableArray arrayWithCapacity:[responseObject count]];

for (NSDictionary *boksProductInfoDict in responseObject) {

    NSString *featureName = boksProductInfoDict[@"FeatureNaam"];
    NSString *available = boksProductInfoDict[@"Beschikbaar"];

    GCBOKSProductInfo *boksProductInfo = [[GCBOKSProductInfo alloc] initWithFeatureName:featureName available:available.boolValue];

    [result addObject:boksProductInfo];
}

提取featureName和可用的工作(如果我在对象中放置一个断点,我看到它是正确的),但“boksProductInfo”似乎永远不会正确分配/初始化,所以当我将它添加到“result”数组条目中没有信息。

如果我试图点击“boksProductInfo”,我会得到这个:

ProjectName.GCBOKSProductInfo:0x60800005ee70

如果我尝试po“boksProductInfo.featureName”,我会得到这个:

错误:成员引用类型'GCBOKSProductInfo *'是一个指针;你的意思是使用' - >'吗?

错误:'GCBOKSProductInfo'类型的定义不完整 向前声明'GCBOKSProductInfo'

知道我可能错在哪里吗?

0 个答案:

没有答案