在swift中,有没有办法区分修饰符和函数?

xytpbqjk  于 2023-03-22  发布在  Swift
关注(0)|答案(2)|浏览(106)

当我阅读Swift代码时,我可以看到一些代码,如.XXX()。
例如.padding().shuffle()
我知道.padding是一种UI修饰符,.shuffle是数组的函数。
两者的语法都是“.XXX()",那么它们之间有什么区别吗?
我觉得有点困惑,为什么Swift同时有Modifier和Function,而Modifier看起来像一种函数。
谢谢

nr7wwzry

nr7wwzry1#

从语言的Angular 来看,在这个意义上没有“修饰符”。paddingshuffled都声明为 * 方法 *。

func padding(_ length: CGFloat) -> some View
func shuffled() -> [Self.Element]

只是在SwiftUI documentation中,它们调用了一组特定的方法(大部分在View协议中声明)“视图修改器”,因为它们返回的是被调用的视图的修改版本。例如,someView.padding(7)给了你一个新的视图,它看起来非常类似于someView,只是它有一些填充。
在SwiftUI中,您将视图组装到描述应用用户界面的层次结构中。为了帮助您自定义应用视图的外观和行为,您可以使用 view modifiers
由于视图修饰符是Swift方法,其行为由View协议提供,因此您可以将它们应用于任何符合View协议的类型,包括TextImageButton等内置视图以及您定义的视图。
你可以在这里找到许多视图修改器的列表,并根据它们修改的内容进一步分类。
所以不,没有语法上的区别,只是语义上的区别。视图修饰符 * 修改视图 *。其他不是视图修饰符的方法则不这样做。
更复杂的是,还有一个单独的ViewModifier协议,它与modifier视图修饰符一起使用,但我不认为ViewModifier是您所指的。

tuwxkamq

tuwxkamq2#

padding()shuffle()都是函数。
https://developer.apple.com/documentation/swift/array/shuffle()
https://developer.apple.com/documentation/swiftui/view/padding(::)
两者背后的前提是相同的,以预定义的方式修改自身并返回新版本。
.padding()
向此视图的特定边缘添加相等的填充量。
.shuffle()
在适当位置 Shuffle 集合。
.padding()用于更改Viewshuffle()用于更改Array/Collection
.padding()特定于SwiftUI框架,shuffle()属于Swift。
Swift是SwiftUI的语言。
主要的区别是它的父对象ViewArray
要创建类似于padding的东西,需要扩展View

extension View {
    func borderedCaption() -> some View {
        modifier(BorderedCaption())
    }
}

https://developer.apple.com/documentation/swiftui/viewmodifier
要创建像shuffle这样的东西,需要扩展Array

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
    }
}

我应该如何循环前3名的排名,应该在不同的地方设计在SwiftUI

相关问题