编辑代码



let digitNames = [0: "zero", 1: "one", 2: "two", 3: "three", 4: "Four",
    5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"]

let names = [16, 58, 510]
let newArr = names.map{
    (number) -> String in
    var number = number
    var output = ""
    repeat{
        output = digitNames[number % 10]! + output
        number /= 10
       
    }while number > 0
    return output
}

for item in newArr{
    print(item)
}

//假如number = 16 ,16 > 0, output =  "six", number = 1 ,
//output = "onesix"
16/10 = 1, 额,这里自动取整了,我还在想怎么处理小数呢
// 原来求余也是我的认知缺陷,1%10 = 1, 5%10 = 5
根据数学原理,如果a b均为正整数且a<b时,a % b的值为a
鹅,原来这是乌龟屁股————规定
//极力求解有个好处,把认知缺陷踢出来

//终于清楚区分了枚举的“关联值”和“原始值”

//关联值的写法太奇怪了吧
enum Barcode{
    case upc(Int, Int, Int, Int)
    case qrCode(String)
}
//一个两个看起来像函数申明,看解释却说是元组和字符串
//很好奇是不是都用圆括号来括起类型,等我读一下官方
//官方没说。。。
//这个不是关联值,只是关联值的类型
//关联值没有值,只有类型? 恐怖-_-!

var productBarcode = Barcode.upc(8, 85909, 51226, 3)
productBarcode = .qrCode("ABCDEFGHIJKLMNOP")

//额,原始值的附加知识点:原始值的隐藏赋值。。。分为Int和String两种
//一个是渐加,一个是自身名字

//看得越多、想得越多、练得越多,脉络就越清晰

所以,很多看起来很奇怪的东西,百思不得其解时不妨去找找官方,
也许官方已有专门定义,多奇怪都会变得合情合理,当然,也有
强制合理,明明不符合逻辑,官方却说这是龟腚。
//比如,你看到的闭包是有()的,但是你又在某处看到没有()的
闭包,你就感到奇怪,怎么突然间少了(),关键是能运行
//然后百度“闭包什么情况可以略去()不写”
//然鹅,官方文档早有定义:这是一种为了简化代码的官方认可方式。。。

func chooseStepFunction(backward: Bool) -> (Int) -> Int {
    return backward ? stepBackward : stepForward
}
//我悟:这个函数只根据参数值来做选择,其他的什么都不做
//一个月后又不悟了,既然只是做选择,为什么不直接if-else?
//网答:使代码更具可读性。 通过使用函数选择,可以将具体的实现细节封装在不同的函数中(stepForward 和 stepBackward),
这一点有助于代码的复用。 这种方法在需要根据不同条件动态选择不同的策略或行为时非常有用。

func stepForward(_ input: Int) -> Int {
    return input + 1
}
func stepBackward(_ input: Int) -> Int {
    return input - 1
}

var currentValue = 3
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)

repeat{
    currentValue = moveNearerToZero(currentValue)
    print("last \(currentValue)")
}while(currentValue > 0)

又悟,所谓的“嵌套函数”指的是里面的那个函数,而外面的那个函数
它叫:外围函数。 nested functions  &  enclosing functions