新的SwiftUI教程有以下代码:
struct ContentView: View {
var body: some View {
Text("Hello World")
}
}
第二行是单词some,在他们的网站上突出显示,就好像它是一个关键字一样。
Swift 5.1似乎没有把some作为关键字,而且我不知道some这个词还能在那里做什么,因为它在类型通常的位置。有没有一个新的、未公布的Swift版本?它是一个我不知道的被用在类型上的函数吗?
关键字有的作用是什么?
不透明的返回类型
如果你看一下我的例子,你会发现一些手势意味着myGesture属性将始终实现手势协议,然而,具体的实现类型不需要被调用者知道(它是隐藏的)。body属性也是如此——不是提供具体的类型,而是根据它支持的协议(即View)来描述返回值。
代码如下:
import SwiftUI
struct ContentView: View {
@State private var rotate: Angle = .zero
var myGesture: some Gesture {
RotationGesture()
.onChanged { rotate = $0 }
.onEnded { angle in rotate = angle }
}
var body: some View {
Rectangle()
.frame(width: 200, height: 200)
.foregroundColor(.blue)
.rotationEffect(rotate)
.gesture(myGesture)
}
}
除此之外,所有应用于矩形的SwiftUI修饰符在返回值时也使用some关键字。例如:
func foregroundColor(_ color: Color?) -> some View
不透明的返回类型
如果你看一下我的例子,你会发现一些手势意味着myGesture属性将始终实现手势协议,然而,具体的实现类型不需要被调用者知道(它是隐藏的)。body属性也是如此——不是提供具体的类型,而是根据它支持的协议(即View)来描述返回值。
代码如下:
import SwiftUI
struct ContentView: View {
@State private var rotate: Angle = .zero
var myGesture: some Gesture {
RotationGesture()
.onChanged { rotate = $0 }
.onEnded { angle in rotate = angle }
}
var body: some View {
Rectangle()
.frame(width: 200, height: 200)
.foregroundColor(.blue)
.rotationEffect(rotate)
.gesture(myGesture)
}
}
除此之外,所有应用于矩形的SwiftUI修饰符在返回值时也使用some关键字。例如:
func foregroundColor(_ color: Color?) -> some View