Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
// swift-tools-version: 5.9
// swift-tools-version: 5.10
import PackageDescription

let package = Package(
name: "skip-bridge",
platforms: [.iOS(.v16), .macOS(.v13)],
platforms: [.iOS(.v16), .macOS(.v14)],
products: [
.library(name: "SkipBridge", type: .dynamic, targets: ["SkipBridge"]),
.library(name: "SkipBridgeToKotlinSamples", type: .dynamic, targets: ["SkipBridgeToKotlinSamples"]),
Expand Down
64 changes: 64 additions & 0 deletions Sources/SkipBridgeToKotlinCompatSamples/Samples.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,67 @@ public class Compat {

public struct CompatError: Error {
}

public struct CompatCallbacks: @unchecked Sendable {
// TODO: https://github.com/skiptools/skip/issues/534
//public typealias AsyncCallback = () async -> ()
public typealias AsyncCallback = () -> ()
public typealias Callback = () -> ()
public typealias URLCallback = (URL) -> ()

// `- error: invalid conversion from 'async' function of type '() async -> ()' to synchronous function type '() throws -> ()'
public let didLogin: AsyncCallback
public let didCancel: AsyncCallback
public let didSelectEmail: Callback
public let didSelectSettings: Callback
public let onURLSelected: URLCallback

public init(
didLogin: @escaping AsyncCallback = {},
didCancel: @escaping AsyncCallback = {},
didSelectEmail: @escaping Callback = {},
didSelectSettings: @escaping Callback = {},
onURLSelected: @escaping URLCallback = { _ in }
) {
self.didLogin = didLogin
self.didCancel = didCancel
self.didSelectEmail = didSelectEmail
self.didSelectSettings = didSelectSettings
self.onURLSelected = onURLSelected
}
}

@MainActor
open class CompatMainActor: Identifiable {
public nonisolated let id: String
public let scene: Int

public init(scene: Int, id: String? = nil) {
self.id = id ?? ""
self.scene = scene
setup()
}

public func setup() {
}
}

public struct CompatMutableStruct {
public var str: String
public init(_ str: String) {
self.str = str
}

public mutating func mutableFunc(_ str: String) {
self.str = str
}
}

//public enum CompatMutableEnum {
// case a
// case b(String)
//
// public mutating func mutableFunc(_ update: String) {
// self = .b(update)
// }
//}
Original file line number Diff line number Diff line change
Expand Up @@ -92,4 +92,27 @@ final class BridgeToKotlinCompatTests: XCTestCase {
XCTAssertEqual(collected2, listOf(100, 200))
#endif
}

func testCompatCallbacks() async {
#if SKIP
// TODO: make functions async to reproduce https://github.com/skiptools/skip/issues/534
let callbacks = CompatCallbacks(didLogin: { }, didCancel: { }, didSelectEmail: { }, didSelectSettings: { }, onURLSelected: { url in })
callbacks.didSelectEmail()
await callbacks.didLogin()
#endif
}

func testCompatMainActor() async {
#if SKIP
let compatMain = await CompatMainActor(scene: 123)
await compatMain.setup()
#endif
}

func testCompatMutableStruct() async {
#if SKIP
var compatStruct = CompatMutableStruct("ABC")
compatStruct.mutableFunc("XYZ")
#endif
}
}
Loading