Closed5
SwiftUIのTextを触る

@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
@frozen public struct Text : Equatable, Sendable {
こんな感じで書いてある。
structはSwiftでいうclassのようなものと理解。
EquatableとSendableのプロトコルを実装している。
大体以下と理解した。
- Equatableはオブジェクトを比較できる機能
- Sendableは複数スレッドで更新できる機能

@inlinable public init(verbatim content: String)
このように記載されている。
initはSwiftの構造体やクラスのイニシャライザ。
funcキーワードが不要。
@inlinable ... インライン化する
public ... モジュール外部から見えるようにする
init ... 関数名
verbatim ... 引数ラベル
content ... 引数名
String ... 型
Swiftでは引数ラベルというものがある。
引数ラベルを記載しない場合は引数名が引数ラベルになる。
引数ラベルを"_"とすると引数ラベルを省略して関数に引数を渡すことができる。
func hoge(key content: String)
hoge(key: "Test")
こんな感じで定義してこんな感じで呼び出すと理解

public init<S>(_ content: S) where S : StringProtocol
引数ラベルを省略する場合にイニシャライザ。
StringProtocolを継承したものであれば引数に設定することができる。
StringProtocolとは?
文字の集合であることを表すProtocolのことらしい。
StringやSubStringはStringProtocolを実装している。

public static func == (a: Text, b: Text) -> Bool
Textインスタンスの等価性を評価するためのメソッド。
Equatableのプロトコルに準拠するために定義が必要。
Text("hoge") == Text("piyo") // false
こういうチェックができる。
static funcとは
型に対して与えられたメソッド。
static func: 継承されないメソッド。struct や enum でも使用可能。
class func: 継承可能なメソッド。class でのみ使用可能。

@available(iOS 15.0, macOS 12.0, tvOS 15.0, watchOS 8.0, *)
extension Text {
@available(iOS 17.0, macOS 14.0, tvOS 17.0, watchOS 10.0, *)
public func typesettingLanguage(_ language: Locale.Language, isEnabled: Bool = true) -> Text
}
このような記載がある。
iOS17以上で利用可能な拡張関数。
extentsion TextによってText構造体自体を編集せずにメソッドを生やすことが可能。
このスクラップは2024/08/16にクローズされました