从结构数组中获取实际产品

时间:2018-08-01 06:57:48

标签: ios swift

我有代码:

struct CountedProduct
{
    var productCode: String
    var productCountable: Bool


    init(productCode: String, productCountable: Bool, pricePerKg: Decimal, weightYieldInPercent: Decimal?, pricePerPortion: Decimal, countPerPortion: Int?, weightPerPortionInGrams: Decimal?, pieceWeight: Decimal?) {
        self.productCode = productCode
        self.productCountable = productCountable
    }

}


struct Calculator
{  
    var type: String?

    let createTime: Double
    var products : [CountedProduct]?
    var activeProduct: Int? 



public mutating func getActiveProducts(index: Int)->CountedProduct{
        for (id, element) in (products?.enumerated())!{
            if id == index {
                return  (self.products?[index])!
            }
        }
        return activeProduct
    }

}  

我在函数getActiveProducts中有错误

  

无法转换类型为'Int?'的返回表达式返回类型“ CountedProduct”

我需要在产品[CountedProduct]中下载当前选择的产品。 产品中的产品表可以为空

2 个答案:

答案 0 :(得分:4)

错误非常明显:

函数结束时,您返回activeProduct,它是一个Int,但返回值是CountedProduct

我建议声明products为非可选,以摆脱难看的问号

var products = [CountedProduct]()

并使用此改进的功能:

public func getActiveProduct(index: Int) -> CountedProduct? {
        guard index < products.count else { return nil }
        return products[index]
    }
}  

由于知道索引,因此不需要循环,但必须检查索引是否小于数组中的项目数。实际上,该函数不是mutating,并且命名应采用单数形式,因为您将只返回一个对象

答案 1 :(得分:0)

您的activeProduct是整数类型,并且您在activeProduct方法中返回getActiveProducts,而返回类型为CountedProduct,因此发生了这种错误。

您可以按照以下说明解决此错误

var activeProduct: CountedProduct?