マガジンのカバー画像

Swiftでいこう!

601
楽しくプログラミング!Swiftはなんだか楽しい"ことば"です。
運営しているクリエイター

2021年7月の記事一覧

Swiftでプログラミング-Automatic Reference Counting

Swiftは、自動参照カウント(ARC)を使用して、アプリのメモリ使用量を追跡および管理します。 ほとんどの場合、これはSwiftでメモリ管理が「正しく機能する」ことを意味し、メモリ管理について自分で考える必要はありません。 ARCは、クラスインスタンスが不要になると、クラスインスタンスが使用していたメモリを自動的に解放します。 ただし、場合によっては、ARCでメモリを管理するために、コードの各部分間の関係に関する詳細情報が必要になります。 この章では、これらの状況について

SWiftUIでいこう! - Timer.publish処理

参考サイトを見ながらコードを書いて行きます。簡単にするためで見た目の部分は省いています。 大事なタイマーの部分です。 let timer = Timer.publish(every: 1.0, on: .main, in: .common).autoconnect() このペアになるのが、 .onReceive() となります。そして、今現在の年月日、時刻を取得します。 @State var currentTime:Date = Date() これを Te

Swiftでプログラミング- Opaque Types

不透明な戻り型を持つ関数またはメソッドは、その戻り値の型情報を非表示にします。 関数の戻り型として具体的な型を提供する代わりに、戻り値はサポートするプロトコルの内容が記述される場合があります。 戻り値の基になる型はプライベートのままである可能性があるため、型情報を非表示にすることは、モジュールとモジュールを呼び出すコードとの分けることが出来ます。 型がプロトコル型である値を返すのとは異なり、不透明(OPAQUE)型は型IDを保持します。コンパイラは型情報にアクセスできますが、

Swiftでプログラミング-Generics 3

Generic Where Clauses 型制約を使用すると、ジェネリック関数、添え字、または型に関連付けられた型パラメーターの要件を定義できます。 associated typeの要件定義をして便利に使うことが出来ます。これを使うために、ジェネリックwhere句を定義します。ジェネリックwhere句を使用するにははassociated typeを定義して特定のプロトコルに準拠、または特定の型パラメーターとassociated typeが同じという要件を満たす必要がありま

Swiftでプログラミング-Generics 2

Type Constraints swapTwoValues(_:_ :)関数と Stack typeは、どの型でも機能します。ただし、ジェネリック関数やジェネリック型で使用できる型に特定の型制約を適用すると便利な場合があります。型制約は、型パラメーターが特定のクラスから継承するか、特定のプロトコルまたはprotocol compositionに準拠する必要があります。 たとえば、Swiftの辞書型では、辞書のkeyとして使用できる型に制限があります。辞書で説明されているよ

Swiftでプログラミング-Generics 1

ジェネリックコードを使用すると、定義した要件に応じて、任意の型で機能する柔軟で再利用可能な関数と型を記述できます。 重複を避け、その意図を明確にしながら抽象的な方法で表現するコードを書くことができます。 ジェネリックはSwiftの最も強力な機能の1つであり、Swift標準ライブラリの多くはジェネリックコードで構築されています。 たとえば、Swiftの配列型と辞書型はどちらもジェネリックコレクションです。 Int値を保持する配列、String値を保持する配列、または実際にS

Swiftでプログラミング-Protocols 3

Adding Protocol Conformance with an Extension 拡張機能を使用したプロトコル準拠の追加 既存の型にアクセスできない場合でも、既存の型を拡張して新しいプロトコルを採用し、準拠させることができます。 拡張機能は、既存の型に新しいプロパティ、メソッド、および添え字を追加し、プロトコルが必要とする要件を追加できます。 今あるインスタンスの型は、拡張されたインスタンスの型が追加されると、プロトコルに適合したものを自動的に採用します。

Swiftでプログラミング-Protocols 2

Protocols as Types プロトコル自体は実際には機能を実装していません。 それでも、コードではプロトコルを本格的な型として使用できます。 プロトコルを型として使用することは、"existential type"と呼ばれることもあります。これは、「"T"がプロトコルに準拠するような型"T"が存在する」というフレーズに由来します。 プロトコルは、次のような他のタイプが許可されている多くの場所で使用できます。 ・関数、メソッド、または初期化子のパラメーター型または

SwiftUIでいこう! - Timer処理まとめ。

タイマーを作るときの作り方をまとめ。簡単にXcodeのplaygroundで実行してみます。 import Foundationvar count = 0Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in count += 1 print(count)} これで、コンソールに1,2,3,・・・とカウントアップされます。これを関数に変えても同じことが出来ます。 var coun

Swiftでプログラミング-Protocols 1

プロトコルは、特定のタスクまたは機能の一部に適したメソッド、プロパティ、およびその他の要件の青写真を定義します。 次に、プロトコルをクラス、構造、または列挙型で採用して、これらの要件の実際の実装を提供できます。 プロトコルの要件を満たすすべての型は、そのプロトコルに準拠していると言われます。 適合型が実装する必要のある要件を指定することに加えて、プロトコルを拡張して、これらの要件の一部を実装したり、適合型が利用できる追加機能を実装したりできます。 Protocol Sy

Swiftでプログラミング-Extensions

extensionは、既存のクラス、構造、列挙型、またはプロトコルタイプに新しい機能を追加します。 これには、元のソースコードにアクセスできない型を拡張する機能があります(遡及モデリングと呼ばれます)。extensionは、Objective-Cのカテゴリに似ています。 (Objective-Cカテゴリとは異なり、Swiftのextensionには名前がありません。) Swiftのextensionは次のことができます。 ・計算インスタンスプロパティと計算タイププロパティ