【SwiftUI】iOS16から登場したPasteButtonについて調べた

# はじめに
iOS16から追加されたコンポーネントで使ったことがなかったので調べてみました。

# 基本的な使い方
`payloadType`には[こちら](https://qiita.com/SNQ-2001/items/093d56fba9bdb9c838e3)にある型が指定できると思います。
戻り値は指定した型の配列です。

複数の型を取得する方法もありますが、使い方があまり変わらないので今回は省略します。

```swift
import SwiftUI

struct ContentView: View {
    @State var text: String = ""
    var body: some View {
        VStack(spacing: 50) {
            TextField(text: $text, axis: .vertical) {
                Text("テキストフィールド")
            }
            .textFieldStyle(.roundedBorder)

            PasteButton(payloadType: String.self) { texts in
                guard let text = texts.first else { return }
                self.text = text
            }
        }
        .padding()
    }
}
```

![simulator_screenshot_EFCFAD35-BD77-4642-8868-88977BAD1BF0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/18a2c854-64e7-aee2-700c-79fda6e8f82a.png)

# カスタマイズ
### 色を変更する
```diff_swift
import SwiftUI

struct ContentView: View {
    @State var text: String = ""
    var body: some View {
        VStack(spacing: 50) {
            TextField(text: $text, axis: .vertical) {
                Text("テキストフィールド")
            }
            .textFieldStyle(.roundedBorder)

            PasteButton(payloadType: String.self) { texts in
                guard let text = texts.first else { return }
                self.text = text
            }
+           .tint(.red)
        }
        .padding()
    }
}
```
![simulator_screenshot_EB237F55-A07D-4D7C-A53E-4250A3E7B5EC](https://user-images.githubusercontent.com/84154073/209465281-c7a7e6dd-421f-443d-b177-0a413aa5a518.png)

### ラベルのスタイル
```diff_swift
import SwiftUI

struct ContentView: View {
    @State var text: String = ""
    var body: some View {
        VStack(spacing: 50) {
            TextField(text: $text, axis: .vertical) {
                Text("テキストフィールド")
            }
            .textFieldStyle(.roundedBorder)

            PasteButton(payloadType: String.self) { texts in
                guard let text = texts.first else { return }
                self.text = text
            }
+           .labelStyle(.automatic)
        }
        .padding()
    }
}
```
#### titleOnly
![simulator_screenshot_E176468A-243C-4533-95CC-A28397A158CA](https://user-images.githubusercontent.com/84154073/209465344-9c343ec2-9c93-43e7-acef-d8cd9083e0af.png)

#### iconOnly
![simulator_screenshot_65B77C36-B72B-48A2-A5B6-4804A5010F5D](https://user-images.githubusercontent.com/84154073/209465359-4b3437da-8191-4a49-9600-5f9cf747d8c9.png)

#### titleAndIcon
![simulator_screenshot_BD946262-B682-4568-B8B7-1BEC79607754](https://user-images.githubusercontent.com/84154073/209465376-cbced85c-51ba-40f7-b354-2fd1b0e2bee9.png)

### ボタンの背景
```diff_swift
import SwiftUI

struct ContentView: View {
    @State var text: String = ""
    var body: some View {
        VStack(spacing: 50) {
            TextField(text: $text, axis: .vertical) {
                Text("テキストフィールド")
            }
            .textFieldStyle(.roundedBorder)

            PasteButton(payloadType: String.self) { texts in
                guard let text = texts.first else { return }
                self.text = text
            }
+           .buttonBorderShape(.automatic)
        }
        .padding()
    }
}
```

#### capsule
![simulator_screenshot_E31F5702-B5BF-4376-B359-CAD3419E18F6](https://user-images.githubusercontent.com/84154073/209465454-86780796-acdb-4e91-9e82-e7ad8c67ba1b.png)

#### roundedRectangle
![simulator_screenshot_538AED78-B289-4103-9AA9-F8438AFA6F63](https://user-images.githubusercontent.com/84154073/209465464-20ad615e-3c74-4ab5-9b40-bf3fe7631b21.png)

#### roundedRectangle(radius:)
![simulator_screenshot_3CA9DFAB-DBE8-499B-BF7B-23DC5F3A9785](https://user-images.githubusercontent.com/84154073/209465492-c6e5eebd-ad86-4ada-941a-39f09361e5e4.png)

# おわり
ちょっとカスタマイズ性が低いかなと思いました。
buttonStyleが使えてもいいのに。。。