我有代码:
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]
中下载当前选择的产品。
产品中的产品表可以为空
答案 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?