Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d02ccb0

Browse files
authored
Merge pull request #2 from kotlin-hands-on/annotations
Update SKIE app
2 parents 3f00701 + 86c62f5 commit d02ccb0

File tree

26 files changed

+292
-312
lines changed

26 files changed

+292
-312
lines changed

‎kotlin-swift-interopedia-samples-skie/iosApp/iosApp.xcodeproj/project.pbxproj‎

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111
058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; };
1212
2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; };
1313
66CD08F82A6A5C0E00D66EFD /* FunctionWithDefaultArgumentsExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66CD08F72A6A5C0E00D66EFD /* FunctionWithDefaultArgumentsExample.swift */; };
14-
66CD08FF2A71559000D66EFD /* JavaDocComments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66CD08FE2A71559000D66EFD /* JavaDocComments.swift */; };
15-
66CD090A2A78109A00D66EFD /* DataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66CD09092A78109A00D66EFD /* DataClass.swift */; };
1614
66CD090E2A79052C00D66EFD /* EnumClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66CD090D2A79052C00D66EFD /* EnumClass.swift */; };
1715
66CD09142A790FF300D66EFD /* SealedClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66CD09132A790FF300D66EFD /* SealedClass.swift */; };
1816
66D4CCF32AD6EDA000552E0E /* SuspendFunction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66D4CCF22AD6EDA000552E0E /* SuspendFunction.swift */; };
19-
66D4CD0A2AD919DF00552E0E /* ConstructorWithDefaultArgumentsExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66D4CD092AD919DF00552E0E /* ConstructorWithDefaultArgumentsExample.swift */; };
2017
66D4CD462ADD754E00552E0E /* FlowExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66D4CD452ADD754E00552E0E /* FlowExample.swift */; };
18+
66F10C7D2B19FD1300FFB2C8 /* InteropSamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66F10C7C2B19FD1300FFB2C8 /* InteropSamples.swift */; };
19+
66F10C7F2B19FD2E00FFB2C8 /* ResultView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66F10C7E2B19FD2E00FFB2C8 /* ResultView.swift */; };
20+
66F10C812B19FDA400FFB2C8 /* SealedInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66F10C802B19FDA400FFB2C8 /* SealedInterface.swift */; };
2121
7555FF83242A565900829871 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7555FF82242A565900829871 /* ContentView.swift */; };
2222
/* End PBXBuildFile section */
2323

@@ -39,13 +39,13 @@
3939
058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
4040
2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = "<group>"; };
4141
66CD08F72A6A5C0E00D66EFD /* FunctionWithDefaultArgumentsExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FunctionWithDefaultArgumentsExample.swift; sourceTree = "<group>"; };
42-
66CD08FE2A71559000D66EFD /* JavaDocComments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JavaDocComments.swift; sourceTree = "<group>"; };
43-
66CD09092A78109A00D66EFD /* DataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataClass.swift; sourceTree = "<group>"; };
4442
66CD090D2A79052C00D66EFD /* EnumClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnumClass.swift; sourceTree = "<group>"; };
4543
66CD09132A790FF300D66EFD /* SealedClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SealedClass.swift; sourceTree = "<group>"; };
4644
66D4CCF22AD6EDA000552E0E /* SuspendFunction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuspendFunction.swift; sourceTree = "<group>"; };
47-
66D4CD092AD919DF00552E0E /* ConstructorWithDefaultArgumentsExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConstructorWithDefaultArgumentsExample.swift; sourceTree = "<group>"; };
4845
66D4CD452ADD754E00552E0E /* FlowExample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FlowExample.swift; sourceTree = "<group>"; };
46+
66F10C7C2B19FD1300FFB2C8 /* InteropSamples.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteropSamples.swift; sourceTree = "<group>"; };
47+
66F10C7E2B19FD2E00FFB2C8 /* ResultView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultView.swift; sourceTree = "<group>"; };
48+
66F10C802B19FDA400FFB2C8 /* SealedInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SealedInterface.swift; sourceTree = "<group>"; };
4949
7555FF7B242A565900829871 /* iosApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = iosApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
5050
7555FF82242A565900829871 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
5151
7555FF8C242A565B00829871 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
@@ -70,38 +70,22 @@
7070
path = "Preview Content";
7171
sourceTree = "<group>";
7272
};
73-
66CD08FD2A71556800D66EFD /* Common */ = {
73+
66CD09062A780AF800D66EFD /* ClassesAndInterfaces */ = {
7474
isa = PBXGroup;
7575
children = (
76-
66CD08FE2A71559000D66EFD /* JavaDocComments.swift */,
77-
);
78-
path = Common;
79-
sourceTree = "<group>";
80-
};
81-
66CD09002A715BA500D66EFD /* DataTypes */ = {
82-
isa = PBXGroup;
83-
children = (
84-
);
85-
path = DataTypes;
86-
sourceTree = "<group>";
87-
};
88-
66CD09062A780AF800D66EFD /* Classes */ = {
89-
isa = PBXGroup;
90-
children = (
91-
66CD09092A78109A00D66EFD /* DataClass.swift */,
9276
66CD090D2A79052C00D66EFD /* EnumClass.swift */,
9377
66CD09132A790FF300D66EFD /* SealedClass.swift */,
78+
66F10C802B19FDA400FFB2C8 /* SealedInterface.swift */,
9479
);
95-
path = Classes;
80+
path = ClassesAndInterfaces;
9681
sourceTree = "<group>";
9782
};
98-
66CD090B2A78FD7800D66EFD /* UsualWorkflow */ = {
83+
66CD090B2A78FD7800D66EFD /* MoreAboutFunctions */ = {
9984
isa = PBXGroup;
10085
children = (
10186
66CD08F72A6A5C0E00D66EFD /* FunctionWithDefaultArgumentsExample.swift */,
102-
66D4CD092AD919DF00552E0E /* ConstructorWithDefaultArgumentsExample.swift */,
10387
);
104-
path = UsualWorkflow;
88+
path = MoreAboutFunctions;
10589
sourceTree = "<group>";
10690
};
10791
66D4CD422ADD6EDE00552E0E /* Coroutines */ = {
@@ -134,15 +118,15 @@
134118
isa = PBXGroup;
135119
children = (
136120
66D4CD422ADD6EDE00552E0E /* Coroutines */,
137-
66CD090B2A78FD7800D66EFD /* UsualWorkflow */,
138-
66CD09062A780AF800D66EFD /* Classes */,
139-
66CD09002A715BA500D66EFD /* DataTypes */,
140-
66CD08FD2A71556800D66EFD /* Common */,
121+
66CD090B2A78FD7800D66EFD /* MoreAboutFunctions */,
122+
66CD09062A780AF800D66EFD /* ClassesAndInterfaces */,
141123
058557BA273AAA24004C7B11 /* Assets.xcassets */,
142124
7555FF82242A565900829871 /* ContentView.swift */,
143125
7555FF8C242A565B00829871 /* Info.plist */,
144126
2152FB032600AC8F00CF470E /* iOSApp.swift */,
145127
058557D7273AAEEB004C7B11 /* Preview Content */,
128+
66F10C7C2B19FD1300FFB2C8 /* InteropSamples.swift */,
129+
66F10C7E2B19FD2E00FFB2C8 /* ResultView.swift */,
146130
);
147131
path = iosApp;
148132
sourceTree = "<group>";
@@ -249,13 +233,13 @@
249233
66D4CCF32AD6EDA000552E0E /* SuspendFunction.swift in Sources */,
250234
2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */,
251235
66CD090E2A79052C00D66EFD /* EnumClass.swift in Sources */,
252-
66CD090A2A78109A00D66EFD /* DataClass.swift in Sources */,
236+
66F10C7D2B19FD1300FFB2C8 /* InteropSamples.swift in Sources */,
237+
66F10C7F2B19FD2E00FFB2C8 /* ResultView.swift in Sources */,
253238
66D4CD462ADD754E00552E0E /* FlowExample.swift in Sources */,
254239
66CD08F82A6A5C0E00D66EFD /* FunctionWithDefaultArgumentsExample.swift in Sources */,
255240
66CD09142A790FF300D66EFD /* SealedClass.swift in Sources */,
256-
66D4CD0A2AD919DF00552E0E /* ConstructorWithDefaultArgumentsExample.swift in Sources */,
257-
66CD08FF2A71559000D66EFD /* JavaDocComments.swift in Sources */,
258241
7555FF83242A565900829871 /* ContentView.swift in Sources */,
242+
66F10C812B19FDA400FFB2C8 /* SealedInterface.swift in Sources */,
259243
);
260244
runOnlyForDeploymentPostprocessing = 0;
261245
};
@@ -390,6 +374,7 @@
390374
"$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)",
391375
);
392376
INFOPLIST_FILE = iosApp/Info.plist;
377+
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
393378
LD_RUNPATH_SEARCH_PATHS = (
394379
"$(inherited)",
395380
"@executable_path/Frameworks",
@@ -418,6 +403,7 @@
418403
"$(SRCROOT)/../shared/build/xcode-frameworks/$(CONFIGURATION)/$(SDK_NAME)",
419404
);
420405
INFOPLIST_FILE = iosApp/Info.plist;
406+
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
421407
LD_RUNPATH_SEARCH_PATHS = (
422408
"$(inherited)",
423409
"@executable_path/Frameworks",

‎kotlin-swift-interopedia-samples-skie/iosApp/iosApp/Classes/DataClass.swift‎

Lines changed: 0 additions & 23 deletions
This file was deleted.

‎kotlin-swift-interopedia-samples-skie/iosApp/iosApp/Classes/EnumClass.swift‎

Lines changed: 0 additions & 24 deletions
This file was deleted.

‎kotlin-swift-interopedia-samples-skie/iosApp/iosApp/Classes/SealedClass.swift‎

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import Foundation
2+
import shared
3+
4+
5+
func useEnumClass() {
6+
let e1 = EnumClass.entryOne
7+
let _ = EnumClass.entryTwo
8+
9+
let _ = EnumClass.entryOne.name
10+
let _ = EnumClass.entryOne.type
11+
12+
let _ = EnumClass.companion.findByType(type: "entry_two")
13+
let _ = EnumClass.companion.findByType(type: "entry_two_trheee")
14+
15+
switchEnumClass(enumClassExample: e1)
16+
}
17+
18+
private func switchEnumClass(enumClassExample: EnumClass) {
19+
switch (enumClassExample) {
20+
case .entryOne: print("entryOne")
21+
case .entryTwo: print("entryTwo")
22+
}
23+
}
24+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import Foundation
2+
import shared
3+
4+
func sealedClassExample(){
5+
printSealedClassType(s: SealedClass.Object())
6+
printSealedClassType(s: SealedClass.Simple(param1: "123"))
7+
printSealedClassType(s: SealedClass.Data(param1: "123", param2: true))
8+
}
9+
10+
private func printSealedClassType(s: SealedClass) {
11+
switch onEnum(of: s) {
12+
case .object: print("object")
13+
case .simple(let simple): print("simple \(simple.param1)")
14+
case .data(let data): print("data \(data.param1)\(data.param2)")
15+
}
16+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import Foundation
2+
import shared
3+
4+
func sealedInterfaceExample(){
5+
switchOnSealedInterfaces(sealedInterfaces: SealedInterfacesFirstImpl())
6+
switchOnSealedInterfaces(sealedInterfaces: SealedInterfacesSecondImpl())
7+
}
8+
9+
private func switchOnSealedInterfaces(sealedInterfaces: SealedInterfaces){
10+
switch(onEnum(of: sealedInterfaces)){
11+
case .first: print((sealedInterfaces as! any SealedInterfacesFirst as SealedInterfacesFirst).firstFunctionExample())
12+
case .second: print((sealedInterfaces as! any SealedInterfacesSecond as SealedInterfacesSecond).secondFunctionExample())
13+
}
14+
}
15+
16+
class SealedInterfacesFirstImpl : SealedInterfacesFirst {
17+
func firstFunctionExample() -> String {
18+
return "first"
19+
}
20+
}
21+
22+
class SealedInterfacesSecondImpl : SealedInterfacesSecond {
23+
func secondFunctionExample() -> String {
24+
return "second"
25+
}
26+
}

‎kotlin-swift-interopedia-samples-skie/iosApp/iosApp/Common/JavaDocComments.swift‎

Lines changed: 0 additions & 9 deletions
This file was deleted.

‎kotlin-swift-interopedia-samples-skie/iosApp/iosApp/ContentView.swift‎

Lines changed: 23 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -2,59 +2,32 @@ import SwiftUI
22
import shared
33

44
struct ContentView: View {
5-
var body: some View {
6-
VStack {
7-
Text("Swift Interop Playground")
8-
Button("Go", action: {
9-
//testClasses()
10-
11-
//testCoroutines()
12-
13-
//testUsualWorkflow()
14-
})
5+
var body: some View {
6+
let sections = sections()
7+
NavigationView {
8+
VStack {
9+
List {
10+
ForEach(sections) { section in
11+
Section(section.title) {
12+
ForEach(section.samples) { sample in
13+
NavigationLink(destination: ResultView(sample: sample)) {
14+
Text(sample.title)
15+
}
16+
}
17+
}
18+
}
19+
}
20+
.listStyle(.sidebar)
21+
}
22+
.navigationTitle("Kotlin/Swift Interop Playground (SKIE)")
23+
.navigationBarTitleDisplayMode(.inline)
1524
}
16-
}
17-
18-
func testClasses(){
19-
//Data classes
20-
//If default argument interop is enabled, it's not necessary to specify all arguments.
21-
//DataClassExample().copy()
22-
23-
//Enum classes
24-
//SKIE creates real Swift enums, and automatically converts them from Kotlin enums. Enums are exhaustive.
25-
//EnumClassExample().useEnumClass()
26-
27-
//SealedClassExample().example(s: SealedClass.Object())
28-
//SealedClassExample().example(s: SealedClass.Simple(param1: "param1"))
29-
//SealedClassExample().example(s: SealedClass.Data(param1: "param1", param2: true))
30-
}
31-
32-
@MainActor func testCoroutines(){
33-
//Suspend functions
34-
//Translated into callback, experimentally - into async / await. Libraries like SKIE and KMP-NativeCoroutines can be used to improve the interop.
35-
//SuspendFunctionExample().example()
36-
37-
//Flows
38-
//Translated into callback, experimentally - into async / await. Generic type arguments are lost. Libraries like SKIE and KMP-NativeCoroutines can be used to improve the interop and provide cancellation support.
39-
//FlowExample().example()
40-
41-
//SuspendFunctionExample().exampleWithCancellation()
42-
//FlowExample().exampleWithCancellation()
43-
}
44-
45-
func testUsualWorkflow(){
46-
//Constructor with default arguments
47-
//If default argument interop is enabled, it's notnecessary to specify all arguments.
48-
//ConstructorWithDefaultArgumentsExample().example()
49-
50-
//Function with default arguments
51-
//If annotated, it's not necessary to specify all the arguments.
52-
//FunctionWithDefaultArgumentsExample().example()
5325
}
5426
}
5527

28+
5629
struct ContentView_Previews: PreviewProvider {
57-
static var previews: some View {
58-
ContentView()
59-
}
30+
static var previews: some View {
31+
ContentView()
32+
}
6033
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /