如何在Swift 4.2中捕获字符串中的单个字符并将其放入数组中?

如何在Swift 4.2中捕获字符串中的单个字符并将其放入数组中?,swift,swift4.2,Swift,Swift4.2,最终目标:将整数变成手写的手写体 我看到一些关于这一点的讨论超出了我的想象。我遇到过一些函数,它们很高兴地将字符串拆分并打印出字符,但在数组中捕获它们似乎是不可能的 似乎单个字符可以通过下标访问,但不能对其进行操作 如果我删除了注释,但是当我运行if循环时,我得到了写入的数字字符串,但是顺序错误,那么下面将打印出1,2,9,5,0 let sentence = "129.50" for (character) in sentence { // print(character)

最终目标:将整数变成手写的手写体

我看到一些关于这一点的讨论超出了我的想象。我遇到过一些函数,它们很高兴地将字符串拆分并打印出字符,但在数组中捕获它们似乎是不可能的

似乎单个字符可以通过下标访问,但不能对其进行操作

如果我删除了注释,但是当我运行if循环时,我得到了写入的数字字符串,但是顺序错误,那么下面将打印出1,2,9,5,0

let sentence = "129.50"
for (character) in sentence {
  //  print(character)
        if character == "0" {
        print("zero")
    }
        if character == "1" {
            print("one")
    }
        if character == "2" {
        print("two")
    }

                etc etc
我还尝试通过一个函数访问索引函数,尽管每次它都完整打印出来,但最后总是崩溃

func speakNum(_ num:Int) {
    let strgNum = String(num)
    for t in 0...strgNum.count {
        let index = strgNum.index(strgNum.startIndex, offsetBy:t)
        //strgnum.index(strgNum.startIndex, offsetBy:t)
      print(String(strgNum[index]))
    }
}

感谢您的帮助。

这是您学习TDD的绝佳时机。测试驱动开发。从一个简单的案例开始,你能想到的最简单的

assert(writtenOut("1") == "one")
完成上述工作,然后添加另一个测试:

assert(writtenOut("1") == "one")
assert(writtenOut("2") == "two")
对所有数字和小数点进行上述操作。您还应该处理错误情况:

assert(writtenOut("d") == "")
然后尝试更复杂的方法:

assert(writtenOut("12") == "one two") // or do you want "twelve" in this case?

你可以自己做,从小处做起,一路往上爬。当您完成时,您将拥有一个工作函数和一系列测试来证明它的工作。

这是学习TDD的绝佳时机。测试驱动开发。从一个简单的案例开始,你能想到的最简单的

assert(writtenOut("1") == "one")
完成上述工作,然后添加另一个测试:

assert(writtenOut("1") == "one")
assert(writtenOut("2") == "two")
对所有数字和小数点进行上述操作。您还应该处理错误情况:

assert(writtenOut("d") == "")
然后尝试更复杂的方法:

assert(writtenOut("12") == "one two") // or do you want "twelve" in this case?
你可以自己做,从小处做起,一路往上爬。当您完成时,您将拥有一个工作函数和一系列测试来证明它的工作。

试试这个

    let str = "129.50"
    let array = Array(str)
    print(array)
打印[“1”、“2”、“9”、“5”、“0”]

试试这个

    let str = "129.50"
    let array = Array(str)
    print(array)

打印[“1”、“2”、“9”、“5”、“0”]

多亏了大家的反馈,我最终得到的结果似乎有点麻烦,但确实有效:

func radio(_ MHz:Double){
let sentence = String(MHz)
    for (character) in sentence {
            if character == "0" {
                print("zero", terminator:" ")
        }
            if character == "1" {
                print("one", terminator:" ")
        }
            if character == "2" {
                print("two", terminator:" ")
        }
            if character == "3" {
                print("tree", terminator:" ")
        }
            if character == "4" {
                print("fower", terminator:" ")
        }
            if character == "5" {
                print("fife", terminator:" ")
        }
            if character == "6" {
                print("six", terminator:" ")
        }
            if character == "7" {
                print("seven", terminator:" ")
        }
            if character == "8" {
                print("eight", terminator:" ")
        }
            if character == "9" {
                print("niner", terminator:" ")
        }
            if character == "." {
                print("decimal", terminator:" ")
        }
    }
    print()
    print()
}
因此,无线电(118.65)产生


一个八位小数的九分音符

多亏了大家的反馈,我最终得到了这个看似有点麻烦但确实有用的东西:

func radio(_ MHz:Double){
let sentence = String(MHz)
    for (character) in sentence {
            if character == "0" {
                print("zero", terminator:" ")
        }
            if character == "1" {
                print("one", terminator:" ")
        }
            if character == "2" {
                print("two", terminator:" ")
        }
            if character == "3" {
                print("tree", terminator:" ")
        }
            if character == "4" {
                print("fower", terminator:" ")
        }
            if character == "5" {
                print("fife", terminator:" ")
        }
            if character == "6" {
                print("six", terminator:" ")
        }
            if character == "7" {
                print("seven", terminator:" ")
        }
            if character == "8" {
                print("eight", terminator:" ")
        }
            if character == "9" {
                print("niner", terminator:" ")
        }
            if character == "." {
                print("decimal", terminator:" ")
        }
    }
    print()
    print()
}
因此,无线电(118.65)产生


0中t的1-8十进制9进制fife

。第一组代码的实际输出是什么?顺便说一句-使用
开关
,而不是所有那些
if
语句。或者至少使用
if-else
,因为在给定的迭代中只有一个是真的。例如,您想得到什么?请添加代码的实际输出,并显示完整的代码示例。Maddy:Ach。。。当然0..
对于0中的t..第一组代码实际得到了什么输出?顺便说一句-使用
开关
,而不是所有那些
if
语句。或者至少使用
if-else
,因为在给定的迭代中只有一个是真的。例如,您想得到什么?请添加代码的实际输出,并显示完整的代码示例。Maddy:Ach。。。当然是0。虽然这可能是一个很好的建议,但这个答案实际上并没有试图回答被问到的问题。@rmaddy-“教一个人钓鱼…”,你是对的,丹尼尔不仅试图回答这个问题,而且还试图回答一些未来的问题…@CRD我完全支持“教一个人钓鱼…”的想法,但问答网站也是如此。发布一个答案,解决被问的问题。然后,如果情绪爆发,添加一些有用的额外细节。想象一下,如果这个答案被发布到网站上的每个问题上,这个网站将是多么无用。@rmaddy-但这不是一个平衡的问题吗?对于一些简单的/初学者的问题,只需提供一根棍子和说明,对于困难的/晦涩的问题,请提供详细的答案,等等。您可以看到人们用SO来代替思考/努力提出一个又一个问题的情况-当然,这会增加很多,但它真的对提问者(或他们未来的客户)有帮助吗?可悲的是,人们有时会因为帮助/建议人们思考而感到沮丧,但这并没有帮助。我认为丹尼尔在帮助提问者方面取得了正确的平衡,当然是YMMV。祝您有个美好的一天!虽然这可能是一个很好的建议,但这个答案实际上并没有试图回答被问到的问题。@rmaddy-“教一个人钓鱼…”,你是对的,Daniel并没有试图回答这个问题,还有一些未来的问题…@CRD我完全支持“教一个人钓鱼…”的想法,但问答网站也是如此。发布一个答案,解决被问的问题。然后,如果情绪爆发,添加一些有用的额外细节。想象一下,如果这个答案被发布到网站上的每个问题上,这个网站将是多么无用。@rmaddy-但这不是一个平衡的问题吗?对于一些简单的/初学者的问题,只需提供一根棍子和说明,对于困难的/晦涩的问题,请提供详细的答案,等等。您可以看到人们用SO来代替思考/努力提出一个又一个问题的情况-当然,这会增加很多,但它真的对提问者(或他们未来的客户)有帮助吗?可悲的是,人们有时会因为帮助/建议人们思考而感到沮丧,但这并没有帮助。我认为丹尼尔在帮助提问者方面取得了正确的平衡,当然是YMMV。祝您有个美好的一天!如果可以使用开关,为什么要使用这一大堆
if
s?甚至是
字典
,其中
数字
是数字打印输出字符串?收音机(117.9)连续5次生成默认大小写-我不知道为什么。无法在注释中有效地发布我的开关大小写代码,但它一直保持默认大小写-您确定字符串的for in循环与开关兼容吗?这似乎是一个疯狂的问题,但从一个初学者的角度来看,Swift中似乎有许多不一致之处,尽管我毫不怀疑这只是因为我的无知。这与你的问题中的代码相同。这是如何解决您最初的问题的?为什么要使用这一大堆