Skip to content

Instantly share code, notes, and snippets.

@luomein
luomein / JavascriptWKCoordinatorSwiftUIView.swift
Created October 21, 2023 06:12
JavascriptWKCoordinatorSwiftUIView
import SwiftUI
import WebKit
#if os(macOS)
public typealias ViewRepresentable = NSViewRepresentable
#elseif os(iOS)
public typealias ViewRepresentable = UIViewRepresentable
#endif
@luomein
luomein / JavascriptWKCoordinatorSwiftUIView.swift
Created October 16, 2023 04:11
JavascriptWKCoordinatorSwiftUIView
import SwiftUI
import WebKit
#if os(macOS)
public typealias ViewRepresentable = NSViewRepresentable
#elseif os(iOS)
public typealias ViewRepresentable = UIViewRepresentable
#endif
public extension Notification.Name {
@luomein
luomein / BasicHTMLWKCoordinatorSwiftUIView.swift
Created October 15, 2023 09:36
BasicHTMLWKCoordinatorSwiftUIView
import SwiftUI
import WebKit
#if os(macOS)
public typealias ViewRepresentable = NSViewRepresentable
#elseif os(iOS)
public typealias ViewRepresentable = UIViewRepresentable
#endif
public extension Notification.Name {
@luomein
luomein / AsyncRequestTests.swift
Created September 24, 2023 08:04
AsyncRequestTests
import XCTest
import ComposableArchitecture
@MainActor
final class AsyncRequestTests: XCTestCase {
let debounceDuration : DispatchQueue.SchedulerTimeType.Stride = 1
let testQueue = DispatchQueue.test
let testString = ["A","B","C","D"]
func testPassThrough()async throws{
@luomein
luomein / AsyncRequestReducer.swift
Created September 24, 2023 07:59
AsyncRequestReducer
import ComposableArchitecture
struct AsyncRequestReducer<RequestType:Equatable, ResponseType:Equatable>: Reducer{
@Dependency(\.mainQueue) var mainQueue
@Dependency(\.asyncRequestClient) var asyncRequestClient
struct State:Equatable{
var debounceDuration : DispatchQueue.SchedulerTimeType.Stride
var response : ResponseType? = nil
}
@luomein
luomein / AsyncRequestClient.swift
Created September 24, 2023 07:55
AsyncRequestClient
import ComposableArchitecture
extension AsyncRequestClient:DependencyKey{
public static let liveValue: AsyncRequestClient = Self(fetch: {_ in
XCTFail("Unimplemented")
})
public static let testValue: AsyncRequestClient = passThroughClient
}
extension DependencyValues{
var asyncRequestClient: AsyncRequestClient{
@luomein
luomein / AsyncRequestClient.swift
Created September 24, 2023 07:44
AsyncRequestClient
public struct AsyncRequestClient{
var fetch: (any Sendable) async throws -> any Sendable
public static var passThroughClient = Self(fetch: {sendable in
return sendable
})
public static var fetchArrayClient = Self(fetch: {sendable in
return [sendable]
})
}
@luomein
luomein / BasicAsyncTaskTests.swift
Created September 24, 2023 07:02
BasicAsyncTaskTests
import XCTest
import ComposableArchitecture
@MainActor
final class BasicAsyncTaskTests: XCTestCase {
let debounceDuration : DispatchQueue.SchedulerTimeType.Stride = 1
let testQueue = DispatchQueue.test
let testString = ["A","B","C","D"]
func test()async throws{
@luomein
luomein / BasicAsyncTaskReducer.swift
Last active September 24, 2023 06:58
BasicAsyncTaskReducer
import ComposableArchitecture
struct BasicAsyncTaskReducer: Reducer{
@Dependency(\.mainQueue) var mainQueue
struct State:Equatable{
var debounceDuration : DispatchQueue.SchedulerTimeType.Stride
var response : String? = nil
}
enum Action:Equatable{
@luomein
luomein / DebounceQueuedRequestTests.swift
Created September 3, 2023 08:47
DebounceQueuedRequestTests
import XCTest
import ComposableArchitecture
@MainActor
final class DebounceQueuedRequestTests: XCTestCase {
typealias State = QueuedRequestReducer.State
func test()async throws{
let debounceDuration : DispatchQueue.SchedulerTimeType.Stride = 1
let testQueue = DispatchQueue.test
let store = TestStore(initialState: State(debounceDuration:debounceDuration)) {