所以我正在学习这门名为“Code With Chris - 14 天初学者挑战(SwiftUI)”的课程(是的,我是初学者),每节课后,都有一个挑战,我几乎完成了挑战,但我做不到不知道为什么它不起作用,所以我检查了已完成挑战的保管箱,我的一切都几乎相同,我找到了与源代码类似的解决方案,但我仍然不明白为什么我的第一个版本(第一张图片)不起作用。我从源代码中复制了所有内容,但它不起作用。有没有可能是源代码的创建者而不是我的错误?
我的预期结果是“Int”像“Double”一样工作,人数是 5,所以我不明白为什么不会。
我的实际结果是一个错误。
我的目标是完成这个挑战:
我们将在 Swift Playground 中尝试一些数学运算。 打开 Xcode 并创建一个新的 Playground (文件菜单->新建->游乐场)。 从 Playground 模板列表中,只需选择“Blank”
挑战 1 声明一个名为 TaxCalculator 的结构体 在里面申报一个名为 tax 的财产,并将其设置为一个十进制值,代表您居住的地方的销售税金额 在内部声明一个名为 totalWithTax 的方法,该方法接受 Double 作为输入参数并返回 Double 值。 在该方法中,编写代码以返回一个 Double 值,表示含税的输入数字
挑战 2 声明一个名为 BillSplitter 的结构体 在里面声明一个叫做 splitBy 的方法: 有一个表示小计的 Double 类型的输入参数 有一个 Int 类型的输入参数,表示人数 返回一个 Double 值 在该方法中,使用 TaxCalculator 的一个实例(来自上面的挑战 1)计算含税总额,然后按传入该方法的人数拆分账单。 返回每个人必须支付的金额。
挑战 3 创建一个 BillSplitter 实例 使用实例打印出每个人支付的金额(假设有 5 个人的账单为 120 美元)
an image of the code with an error
an image of the code without an error
//https://learn.codewithchris.com/courses/take/start/texts/18867185-lesson-9-challenge
//Challenge1
struct TaxCalculator{
var tax = 0.15
func totalWithTax(_ subtotal:Double) -> Double{
return subtotal * (1 + tax)
}
}
//Challenge2
struct BillSplitter {
func splitBy(subtotal:Double, numPeople:Int //here is the problem) ->Double {
let taxCalc = TaxCalculator()
let totalWithTax = taxCalc.totalWithTax(subtotal)
return totalWithTax/numPeople
}
}
let Split = BillSplitter()
print(Split.splitBy(subtotal: 120, numPeople: 5))
答案 0 :(得分:2)
Mouse.getEventDWheel()
是一个 totalWithTax
。 Double
是 numPeople
。
您也需要将 Int
转换为 numPeople
。
Double
像 return totalWithTax / Double(numPeople)
这样的运算符不适用于不匹配的类型。
答案 1 :(得分:2)
Swift 对标量类型有点痛苦。只要不丢失数据,大多数 C 族语言都会悄悄地将标量类型“提升”为其他类型。
byte->int->long int->float->double 都是默默发生的。
在 C 中,此代码仅适用:
int a = 2;
double b = 2.5;
double c = a * b;
值 a
被提升为双精度值,结果是包含双精度值 5.0。
Swift 不是这样。
在 Swift 中,您必须显式地将 a
转换为双精度值。它不会让您将 Int
和 Double
相乘,除非您明确将 Int
强制转换为 Double
,正如 aheze 在他们的回答中所说:
return totalWithTax / Double(numPeople)