[Swift]いつキーワードを使えばいいですか?


なぜsometキーワードを使うのですか?


SWIFTUIでよく使われているのですが….何か知りたいことがありますか.
struct MyFirstView: View {
  var body: some View {
    Text("Hello world!")
  }
}
上記のコードでは、「some」というキーワードによく触れることがあります.
まず「some」とは何かを知っておきましょう
いくつかのキーワードはSWIFT 5.1の新機能です.
いくつかのキーワードはcomputed property bodyに不透明なタイプがあることを示します.
ここで不透明なタイプは?
protocol Shape {
    func describe() -> String
}

struct Square: Shape {
    func describe() -> String {
        return "I'm a square. My four sides have the same lengths."
    }
}

struct Circle: Shape {
    func describe() -> String {
        return "I'm a circle. I look like a perfectly round apple pie."
    }
}
前述のShapeとは、プロトコルとShapeに従う複数のグラフィックを指す.
func makeShape() -> Shape {
  return Circle()
}
このようにしてどのような図形を復元するのか分からない場合
makeShape()は不透明なタイプです.
SWIFTでは不透明なタイプを返すことはできません.
上記のコードでは、「Self」または「Associated type requirements」というエラーが発生するため、共通の制約として使用できるのは、プロトコル「Shape」のみです.
では、間違いをしたくないなら、どうすればいいのでしょうか.
正解は以下の通りです.
func makeShape() -> some Shape {
  return Circle()
}

sometを使えば全て解決!


予めタイプを指定して関数内部を変更するジェニーリックタイプとは逆です.
特定の戻りタイプは、関数のコードに依存します.
本当に気まぐれなやつだ.

でもどうしてこれを使うの??



seomeキーワードが何なのかわかりましたが、なぜこれを使うのか分かりません
簡単な例をあげましょう
お客様は、いくつかの機能を作成するように要求しています.
顧客:1、2、3列逆転してください.
func testFunc() -> Array<Int> {
    return [1, 2, 3]
}
こんなに苦労して(疲れていても)機能を作ったのに、お客さんが急に心が変わりました.
顧客
この場合、testFunc()を使用する他のコードも修正する必要があり、多くの面で怒っています.
この時は少し書けばいいです.
// 고객 변심 전
func testFunc() -> some Collection {
    return [1, 2, 3]
}

// 고객 변심 후
func testFunc() -> some Collection {
    return ["a": 1, "b": 2, "c": 3]
}
testFunc()の内部実装のみを修正し、関数以外の内容を変更する必要はありません.
これによりtestFunc()に依存する他のコードも修正する必要がなくなり、開発者はこのような状況を避けることができます!
なぜsyouでsomeを書いたのかがわかります.
syouでsomeを使用しない場合は、関数の戻り値のたびに、VSTOCK、HSTACK、Button、Textなどの特定のビュー値を指定する必要があります.これは非常に面倒です.