extension Array where Element : RankingProtocol{
func zigZagRankSort() -> Self{
var new: Self = []
//Reposition the objects based on the original index (add to the front or back)
for (idx, item) in self.sorted(by: { lhs, rhs in
lhs.rank < rhs.rank
}).enumerated(){
if idx % 2 != 0{
new.insert(item, at: 0)
}else{
new.append(item)
}
}
return new
}
}
2条答案
按热度按时间nr7wwzry1#
从语言的Angular 来看,在这个意义上没有“修饰符”。
padding
和shuffled
都声明为 * 方法 *。只是在SwiftUI documentation中,它们调用了一组特定的方法(大部分在
View
协议中声明)“视图修改器”,因为它们返回的是被调用的视图的修改版本。例如,someView.padding(7)
给了你一个新的视图,它看起来非常类似于someView
,只是它有一些填充。在SwiftUI中,您将视图组装到描述应用用户界面的层次结构中。为了帮助您自定义应用视图的外观和行为,您可以使用 view modifiers。
由于视图修饰符是Swift方法,其行为由
View
协议提供,因此您可以将它们应用于任何符合View协议的类型,包括Text
、Image
和Button
等内置视图以及您定义的视图。你可以在这里找到许多视图修改器的列表,并根据它们修改的内容进一步分类。
所以不,没有语法上的区别,只是语义上的区别。视图修饰符 * 修改视图 *。其他不是视图修饰符的方法则不这样做。
更复杂的是,还有一个单独的
ViewModifier
协议,它与modifier
视图修饰符一起使用,但我不认为ViewModifier
是您所指的。tuwxkamq2#
padding()
和shuffle()
都是函数。https://developer.apple.com/documentation/swift/array/shuffle()
https://developer.apple.com/documentation/swiftui/view/padding(::)
两者背后的前提是相同的,以预定义的方式修改自身并返回新版本。
.padding()
向此视图的特定边缘添加相等的填充量。
.shuffle()
在适当位置 Shuffle 集合。
.padding()
用于更改View
,shuffle()
用于更改Array
/Collection
。.padding()
特定于SwiftUI框架,shuffle()
属于Swift。Swift是SwiftUI的语言。
主要的区别是它的父对象
View
和Array
。要创建类似于
padding
的东西,需要扩展View
https://developer.apple.com/documentation/swiftui/viewmodifier
要创建像
shuffle
这样的东西,需要扩展Array
我应该如何循环前3名的排名,应该在不同的地方设计在SwiftUI