在没有var / let的Swift中初始化变量(Initializing variables in Swift without var/let)

编程入门 行业动态 更新时间:2024-10-26 19:34:55
在没有var / let的Swift中初始化变量(Initializing variables in Swift without var/let)

我是Swift的新手,所以这可能是一个noob问题,但如果有人清除了疑问我会感激,因为我无法在网上找到任何解释。 在使用for-in循环时,有时变量尚未在之前初始化,并且仍然没有编译器错误。 有时如果我尝试在它们之前编写var / let,它会显示错误 - 'let'模式不能嵌套在已经不可变的上下文中

例如,在下面的代码中,为什么变量movie和releasedDate之前没有被初始化?

class MovieArchive { func filterByYear(year:Int, movies:Dictionary<String, Int> ) -> [String]{ var filteredArray = [String]() for (movie, releaseDate) in movies { if year == releaseDate { filteredArray.append(movie) } } return filteredArray } } var aiThemedMovies = ["Metropolis": 1927, "2001: A Space Odyssey": 1968, "Blade Runner": 1982, "War Games": 1983, "Terminator": 1984, "The Matrix": 1999, "A.I.": 2001, "Her": 2013, "Ex Machina": 2015] var myArchive = MovieArchive() myArchive.filterByYear(year: 2013 , movies: aiThemedMovies)

在此先感谢任何帮助:)

I'm new to Swift so this might come as a noob question but I will be thankful if someone cleared the doubt because I cannot find any explanation online. While using for-in loop, sometimes the variables have not been initialized before and still there is no compiler error. Sometimes if I try to write var/let before them, it shows error- 'let' pattern cannot appear nested in an already immutable context

e.g., in the code below, why have the variables movie and releasedDate not been initialized before?

class MovieArchive { func filterByYear(year:Int, movies:Dictionary<String, Int> ) -> [String]{ var filteredArray = [String]() for (movie, releaseDate) in movies { if year == releaseDate { filteredArray.append(movie) } } return filteredArray } } var aiThemedMovies = ["Metropolis": 1927, "2001: A Space Odyssey": 1968, "Blade Runner": 1982, "War Games": 1983, "Terminator": 1984, "The Matrix": 1999, "A.I.": 2001, "Her": 2013, "Ex Machina": 2015] var myArchive = MovieArchive() myArchive.filterByYear(year: 2013 , movies: aiThemedMovies)

Thanks in advance for any help :)

最满意答案

Swift使用let初始化movie和releaseDate ,但是简化了初始化,这样你就可以假设每次循环迭代时它们都被设置为movies的正确变量。 这就是为什么你不需要在movie和releaseDate之前写let。

如果在变量前面写var,则可以改变它指向的数组中的值。 如果它是一个let,那么它不会让你改变它。

例如,如果将var放在其中一个变量的前面,则此代码会将所有releaseDates更改为2000:

class MovieArchive { func filterByYear(year:Int, movies:Dictionary<String, Int> ) -> [String]{ var filteredArray = [String]() for (movie, var releaseDate) in movies { releaseDate = 2000 if year == releaseDate { filteredArray.append(movie) } } return filteredArray } }

Swift does initialise movie and releaseDate using let, but simplifies that initialisation so that you can just assume that they're set to the correct variables from movies every time the loop iterates. That's why you don't need to write let before movie and releaseDate.

If you write var in front of the variable, you can mutate the value in the array that it points to. If it's a let, then it won't let you mutate it.

For example, if you place var in front of one of the variables, this code will change all the releaseDates to 2000:

class MovieArchive { func filterByYear(year:Int, movies:Dictionary<String, Int> ) -> [String]{ var filteredArray = [String]() for (movie, var releaseDate) in movies { releaseDate = 2000 if year == releaseDate { filteredArray.append(movie) } } return filteredArray } }

更多推荐

本文发布于:2023-08-06 13:36:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1448860.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:初始化   变量   Swift   var   Initializing

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!