新的SwiftUI教程有以下代码:

struct ContentView: View {
    var body: some View {
        Text("Hello World")
    }
}

第二行是单词some,在他们的网站上突出显示,就好像它是一个关键字一样。

Swift 5.1似乎没有把some作为关键字,而且我不知道some这个词还能在那里做什么,因为它在类型通常的位置。有没有一个新的、未公布的Swift版本?它是一个我不知道的被用在类型上的函数吗?

关键字有的作用是什么?


当前回答

为了简化,如果你知道两者的区别

var x = 5

vs

int x =5

然后你就会知道一些。 编译器知道它,您也知道它。在不指定具体细节(它使用的泛型类型)的情况下,尽可能地说明您遵守了某些内容

其他回答

简单的理解方法,比如Objc中的kindOf

你可以假设swift是通用的。

为了简化,如果你知道两者的区别

var x = 5

vs

int x =5

然后你就会知道一些。 编译器知道它,您也知道它。在不指定具体细节(它使用的泛型类型)的情况下,尽可能地说明您遵守了某些内容

对于那些被这个主题弄晕的人,这里有一篇非常解密和一步步的文章,感谢Vadim Bulavin。

https://www.vadimbulavin.com/opaque-return-types-and-the-some-keyword-in-swift/

在我的理解中(可能是错误的)

这是我拥有的

Protocol View{}

 class Button: View { // subclass of View } 

 //this class not a subclass of View
 class ButtonBuilder<T> where T:View { //using T as View here   } 

Then

var body: View = Button() // ok
var body: View = ButtonBilder() //not ok
var body: some View = ButtonBilder() //ok

So

一些协议

使用该协议的泛型类是否可以在自己的代码中作为协议的子类处理