如何解决这个Swift问题(AP CP原则-结构)

如何解决这个Swift问题(AP CP原则-结构),swift,for-loop,struct,Swift,For Loop,Struct,我目前正在浏览苹果的课程书籍,偶然发现了一个我无法理解的问题 有一个结构: struct Song { let title: String let artist: String let duration: Int var longestSong = false } 还有一个包含4首不同持续时间的歌曲的数组:90200150440 这本书要求添加一种方法来检查一首歌是否比另一首歌长 因此,基于之前的材料,我在结构中添加了以下方法: func isLongerTh

我目前正在浏览苹果的课程书籍,偶然发现了一个我无法理解的问题

有一个结构:

struct Song {
    let title: String
    let artist: String
    let duration: Int
    var longestSong = false 
}
还有一个包含4首不同持续时间的歌曲的数组:90200150440

这本书要求添加一种方法来检查一首歌是否比另一首歌长

因此,基于之前的材料,我在结构中添加了以下方法:

func isLongerThan(_ song: Song) -> Bool {
     return duration > song.duration
     }
}
然后,该书要求使用一个循环来查找数组中最长的歌曲,并将其打印到控制台

(提示:使用变量跟踪最长的歌曲并初始化。) 将其复制到数组中的第一个。)

所以,我想出了这个循环:

for (index, _) in songs.enumerated() {
    if index < songs.count-1{
        if songs[index].isLongerThan(songs[index + 1]){
            songs[index].longestSong = true
            print("\(songs[index].title) is longer than \(songs[index+1].title)")
            }
    } else {
        if songs[songs.count-1].isLongerThan(songs[0]){
            songs[songs.count-1].longestSong = true
            print("\(songs[songs.count-1].title) is longer than \(songs[0].title)")
        }
    }
}
用于歌曲中的(索引,u)。枚举(){
如果索引
下一步是将这些歌曲与longestSong=true变量进行比较,直到只剩下一首歌曲。但在我看来,这不是一个好的解决方案

有没有更好更优雅的方法来解决这个问题

UPD 看来我看错了说明书,走错了方向。 在一些帮助下,我设法找到了这个解决方案:

func searchForLongestSong(songs: [Song]) {
    var lngstSongIndex = 0

    for song in 0..<songs.count {
        if songs[song].duration > songs[lngstSongIndex].duration {
            lngstSongIndex = song
        }
    }
    print("The longst song is \"\(songs[lngstSongIndex].title)\"")
}

searchForLongestSong(songs: songs)
func搜索最长的歌曲(歌曲:[歌曲]){
变量lngstSongIndex=0
对于0中的歌曲。歌曲[lngstSongIndex]。持续时间{
lngstSongIndex=歌曲
}
}
打印(“最长的歌曲是\”\(歌曲[lngstSongIndex].title)\“”)
}
搜索最长的歌曲(歌曲:歌曲)

由于它是一个
数组
您可以通过保存最长歌曲的索引来跟踪“最长歌曲”

创建
Int
var
以保存索引


循环0中n的索引
。您应该使用一个变量来跟踪最长的歌曲,但您已经创建了一个属性
longest
,因此返回使用变量
var longest=songs[0]
然后使用一个带范围的基本for循环对更新进行注释,因为您只在函数
searchforlongestsongindex
中使用变量
lngstSongIndex
,它应该在该函数中声明。始终在使用变量的范围内声明变量。非常感谢。现在这个问题看起来很简单,通常是这样。你在读什么书?“在Swift AP CS原则中发展”,这是苹果官方课程的一部分(由3本书组成)。他们在今年早些时候更新了它。你可以在图书应用程序中免费找到这本书。