Swift

Swift Concurrencyメインスレッドクイズ5問

実行環境 >swift --version swift-driver version: 1.90.11.1 Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4) Target: arm64-apple-macosx14.0 > xcodebuild -version Xcode 15.3 Build version 15E204a モチベーション コードレビューを…

Xcode 15.1でswift runの実行時間が元に戻っていた

モチベーション 以前『Xcode 15 で swift run が遅い』というタイトルで登壇したが、今日Xcode 15.2がリリースされたので様子を見た。 speakerdeck.com というのも、Xcode 15ではswift runの内部で(おそらくbetaの名残で)visionOSのSDKを探す処理が入って…

小粒な Tips の共有をしていきたい: 2023年にメモした iOS アプリ開発 Tips 3選

この記事は はてなエンジニア Advent Calendar 2023 の19日目の記事です。昨日は id:onk さんによる『「キャッシュは麻薬」という標語からの脱却 - id:onk のはてなブログ』でした。普段よく使っている Apollo Client では頻繁に更新するデータに関しては更…

YUMEMI.grow Mobile #8 にて、『Xcode 15 で swift run が遅い』で登壇した

イベントURL yumemi.connpass.com 発表資料 speakerdeck.com 発表ネタ Xcode 15 同梱の Swift でインタプリタを作っていた時に、明らかに swift run が遅くて原因を探したことがきっかけ。 github.com たまたま Swift Forums を見ていたら同じような投稿があ…

Swiftのstructでstatic propertyを使うメリット

開発環境 $ swift --version swift-driver version: 1.75.2 Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100) Target: arm64-apple-macosx13.0 TL;DR Q: Swiftのstructでstatic propertyを使うメリットは? A: static propertyはイ…

Associated value付きのenumにIdentifiableを準拠させる

開発環境 $ swift --version swift-driver version: 1.62.15 Apple Swift version 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51) Target: x86_64-apple-macosx13.0 モチベーション こんなコードを書くとコンパイラに怒られる。 // Type 'CustomColor' d…

Swift Bookを読んだ(Basic Operatorsの終わりまで)

開発環境 swift --version swift-driver version: 1.62.15 Apple Swift version 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51) Target: x86_64-apple-macosx13.0 モチベーション 日々の開発でSwiftのIUO(Implicitly Unwrapped Optional)を知らなかっ…

Swiftのタプルは各要素の型が同じでもlabelがあると別の型になる

開発環境 > swift --version swift-driver version: 1.62.15 Apple Swift version 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51) Target: x86_64-apple-macosx13.0 モチベーション docs.swift.org Swift Book進めてる時に以下を試していた。 // コンパ…

Nuke 11.0から学ぶPackage, Product, Module

Nuke 10->11のアップデートで詰まった。そこからPackage, Product, Moduleの区別が以前と比べてつくようになったので備忘録として残す。 モチベーション github.com Nuke 11.0でNukeUI*1がNukeに吸収され、UIImageView などのextensionがNukeExtensionsとい…

自作アプリのDate→String変換をformatted()に置き換える

開発環境 > xcodebuild -version Xcode 14.0 Build version 14A5228q Xcodeはbetaだが本記事の内容はiOS16未満のAPIを使用。 本記事からXcode 14 beta 3。 モチベーション tokizuoh.hatenablog.com 先日Sequenceのformatted()を試した時にDateもformatted()…

Sequenceのformatted()を試す

開発環境 > xcodebuild -version Xcode 14.0 Build version 14A5229c Xcodeはbetaだが本記事の内容はiOS16未満のAPIを使用。 モチベーション Sequenceを読んでいたら知らないメソッドがあったので使ってみる。 ドキュメント formatted() | Apple Developer D…

Swiftで配列のインデックスの存在確認はindices.contains()よりendIndexを使う方がより良い?

2022/06/24追記: 参照しているcontainsが違った。本記事の最終段落に追記。 ドキュメント読んでたら気になったのでメモ。 開発環境 > swift --version swift-driver version: 1.55.1 Apple Swift version 5.7 (swiftlang-5.7.0.113.202 clang-1400.0.16.2) …

HKSampleQueryをHKSampleQueryDescriptorに置き換える

開発環境 > xcodebuild -version Xcode 13.3 Build version 13E113 モチベーション HealthKitが提供するAPIにSwift Concurrency対応のものが増えていたので使ってみる。 HKSampleQueryDescriptor iOS15.3以前では、HealthKitを使ってワークアウトを取得する…

Swift Concurrency: URLのlinesを試す

少しでもSwift Concurrencyに慣れていきたい。 開発環境 > xcodebuild -version Xcode 13.3 Build version 13E113 モチベーション Swift Concurrencyを身体に覚えさせたい lines (URL) As a convenience, you can use Swift’s async-await syntax to asynchr…

Controlling extension points in protocols を読んだ

本記事は下記記事を読めば理解できるので原文を読もう。 www.hackingwithswift.com 昼間、夜に読んで具体的な利用ケースが思い浮かばなかった。忘れそうなので記事に残す。 開発環境 > swift --version swift-driver version: 1.45.2 Apple Swift version 5.…

iOS15で追加されたHealthKitのrequestAuthorizationを試す

開発環境 > xcodebuild -version Xcode 13.3 Build version 13E113 モチベーション Swift Concurrencyに入門したい とりあえず個人開発中のサイクリングログViewerアプリ(tokizuoh/contrail)で実験 iOS15で追加されたHealthKitのrequestAuthorization iOS1…

HealthKitでcyclingの時速は直接取得できないぞ!

結論 HealthKit経由で取得したワークアウト(HKWorkout) から時速を取得するには、 totalDistance(HKQuantity) と duration(TimeInterval) を使って算出する必要がある。 let distance = workout.totalDistance!.kilometers() let averageSpeed = distance …

instantiateViewController(identifier:creator:)を試す

使ったことがないAPIはミニマムですぐ書く! 開発環境 > xcodebuild -version Xcode 13.3 Build version 13E113 モチベーション instantiateViewController(identifier:creator:) を使ったことがないので使ってみたい instantiateViewController(identifier:…

Core Dataを試す

本記事は下記を参考にしています。 developer.apple.com 開発環境 > xcodebuild -version Xcode 13.1 Build version 13A1030d Core Data とは Persist or cache data on a single device, or sync data to multiple devices with CloudKit. https://develope…

SwiftUI x Combine 練習1

本記事は下記を参考にしています。 blog.studysapuri.jp 前々からやりたかったSwiftUIとCombineを組み合わせた実装をやってみる! 開発環境 > xcodebuild -version Xcode 13.1 Build version 13A1030d 作ったもの 2.5秒ごとに [1, 2, 3, 4, 5] をシャッフル…

「Combineをはじめよう」を読んだ

nextpublishing.jp 第2章 SubscribeとSubscription import Combine let subject = PassthroughSubject<String, Never>() final class Receiver { let subscription: AnyCancellable init () { subscription = subject .sink { value in print("received:", value) } } } let</string,>…

sink(receiveValue:)の戻り値を破棄せずに保持しておく必要がある理由を探す

本記事は下記を参考にしています。 nextpublishing.jp 結論 そういう仕様。 This method creates the subscriber and immediately requests an unlimited number of values, prior to returning the subscriber. The return value should be held, otherwise…

FoundationのNumberFormatterを試す

nextpublishing.jp 上記を読んでいる時にNumberFormatterが出てきた。 使ったことがなかったので試す。 開発環境 > swift --version swift-driver version: 1.26.9 Apple Swift version 5.5.1 (swiftlang-1300.0.31.4 clang-1300.0.29.6) Target: x86_64-app…