Effective Swift本があるとしたなら、どんな目的で誰のための本?
- 何のため
- 言語の正しい理解と、簡潔で明瞭で正確なソフトウェアの設計に役立つ内容にしたい
- どうやる
- Effective〜な流儀に従って書籍スタイルは逆引きまとめスタイル
- 言語仕様が常に進化しているSwiftの動向をしっかり押さえながら、それらの最新の機能をどのように使うべきかについて実践的な観点から逆引きにしてその技法をまとめる
- 本当はどうあれば効果的?
import RxSwift | |
import Foundation | |
let queue = DispatchQueue.global(qos: .background) | |
// 念の為に書くと、ここはメインスレッドで呼び出している | |
let stream = Observable.just(1) | |
.flatMap { value -> Observable<Int> in | |
print("flatMap: isMain \(Thread.isMainThread)") |
import SwiftUI | |
struct ContentView: View { | |
var body: some View { | |
ZStack(alignment: .top) { | |
MapView() | |
SlideOverCard { | |
VStack { | |
Text("Half Modal") | |
.font(.headline) |
import Combine | |
struct ReducerContainer { | |
let reducer: () -> (AnyPublisher<Int, Never>) | |
init(reducer: @escaping () -> (AnyPublisher<Int, Never>)) { | |
self.reducer = reducer | |
} | |
static func combine(_ reducers: [ReducerContainer]) -> ReducerContainer { |
let largeArray = ... | |
... | |
let (array1, array2) = { array -> ([Object], [Object]) | |
var array1: [Object] = [] | |
var array2: [Object] = [] | |
array.forEach { | |
if $0.type == .nanika { | |
array1.append($0) | |
} else { | |
array2.append($0) |
import _Concurrency | |
/* | |
DAOでアクター使って行きたいとき(モチベーション的には非同期処理であることを矯正したい場合)、 | |
設計としては | |
actor型をDAOの型とするパターンと、globalActorをDAOで利用する場合の2パターンある。 | |
SampleAがactorを使うパターンで、SampleBがglobalActorを使うパターン。 | |
*/ | |
enum SampleA { |
private func addItem2() async throws { | |
// CheckedContinuation<Void, Error>)と型書かないといけないんだなあこれが | |
try await withCheckedThrowingContinuation { (continuation: CheckedContinuation<Void, Error>) in | |
writeContext.perform { | |
let newItem = Item(context: writeContext) | |
newItem.timestamp = Date() | |
do { | |
try writeContext.save() | |
continuation.resume() |
class Loan { | |
// 借入元金 | |
private var principle: Double | |
// 貸出金利 もしくは 貸出利率 の 百分率。0%や100% | |
private var rate: Double | |
// 貸し出し期間 | |
var period: TimeInterval | |
// 借金総額 | |
private var balance: Double { | |
didSet { |
// https://www.avanderlee.com/swift/dependency-injection/ | |
// MARK: - Example | |
struct DataController { | |
@Injected(\.networkProvider) var networkProvider: NetworkProviding | |
func performDataRequest() { | |
networkProvider.requestData() | |
} |