Swift2 这个函数是如何工作的?
我正在学习使用资源在swift中编码,在那里我看到了这个函数,它反转参数中给定的字符。 代码如下:Swift2 这个函数是如何工作的?,swift2,Swift2,我正在学习使用资源在swift中编码,在那里我看到了这个函数,它反转参数中给定的字符。 代码如下: func reverseIt(s: String) -> String { var rst = "" for char in s.characters { rst = "\(char)" + rst } return rst } 我只是想知道它是如何将其反转的,因为我在这里没有使用任何特定的函数来实现这一点函数非常容易理解,只需查看这一行rst
func reverseIt(s: String) -> String {
var rst = ""
for char in s.characters {
rst = "\(char)" + rst
}
return rst
}
我只是想知道它是如何将其反转的,因为我在这里没有使用任何特定的函数来实现这一点函数非常容易理解,只需查看这一行
rst=“\(char)”+rst
最初是一个空字符串,然后在for
语句的每次迭代中,将每个字符(为for
中的变量获取,然后使用字符串插值)追加到字符串的开头
我希望这对您有所帮助。以“Hello”为例,在您的脑海中逐步完成: 第一次,
rst
为空,变为“H”+rst
或“H”
(因为rst
为空)
下一次,取第二个字符
“e”
,并且rst
变为“e”+rst
,即“e”+“H”
或“eH”
。您可以看到这是怎么回事。它反转字符串的原因是由于赋值(=)运算符右侧的代码顺序。如果代码是这样的:
rst = rst + "\(char)"
那么结果就不会逆转。如果这对你的头脑没有帮助,那么让我们一步一步地去做。使用您的代码:
rst = "\(char)" + rst
对于for in循环的每个过程,值如下所示:
first pass - rst would get char ("h") + rst ("") -> "h"
second pass - rst would get char ("e") + rst ("h") -> "eh"
third pass - rst would get char ("l") + rst ("eh") -> "leh"
fourth pass - rst would get char ("l") + rst ("leh") -> "lleh"
fifth pass - rst would get char ("o") + rst ("lehh") -> "olleh"
这在您的脑海中清楚了吗?您从一个空字符串开始,将字符串中的每个字符添加到空字符串的前面。你写了它,你还不明白什么?在for循环中打印rst,然后你就会看到。我没有写它,我只是在某个地方看到它,然后在这里键入它。“我想出了这个函数”你问题中的这个意味着你写了这个函数。您可能应该编辑您的问题。将代码复制到Xcode项目中并使用内置调试器。设置一个断点,单步执行代码,检查变量,然后你会很快理解它是如何工作的。但是为什么不按照正确的顺序呢。例如,为什么它不按正确的顺序打印“hello”,而是从末尾开始?@YousufEjazi007如果您想一想,有几种方法可以反转字符串,使用堆栈数据结构,从字符串末尾迭代,从开头迭代,等等。当然,每种方法都有成本(在记忆和效率中说话)是的,我确实在网上查过了,甚至有一整本百科全书都有关于如何反转给定字符串的页面。但我还是不太明白。你能再给我一次机会让它简单一点吗?我会很感激的。@Why not correct order?因为正确的顺序是
rst=rst+“\(char)”
。你所需要做的就是仔细思考。在你的头脑中模拟代码。如果rst
是h
,并且你在它前面添加字符e
:rst=“e”+rst
,为什么你期望rst
的新值是“he”而不是“eh”哦,哦…我现在明白了!!!非常感谢你,朋友。这是一件很有常识的事情,但仍然非常感谢你!!!不客气。是的,常识是你想要的答案;-)应该可以帮助你自己回答很多问题!顺便说一句,现在你明白了,其他的答案也应该对你有意义。是的,他们当然有!!再次感谢你,伙计!