Skip to content

Commit f59efc7

Browse files
authored
Fix bug with optional string params (#1767)
1 parent 25f36d6 commit f59efc7

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

pkgs/swift2objc/lib/src/transformer/_core/utils.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,12 @@ import 'unique_namer.dart';
6666
return (value, type);
6767
}
6868
} else if (type is OptionalType) {
69-
final (newValue, newType) = maybeUnwrapValue(type.child, '$value?');
69+
final optValue = '$value?';
70+
var (newValue, newType) = maybeUnwrapValue(type.child, optValue);
71+
if (newValue == optValue) {
72+
// newValue is value?, so the ? isn't necessary and causes compile errors.
73+
newValue = value;
74+
}
7075
return (newValue, OptionalType(newType));
7176
} else {
7277
throw UnimplementedError('Unknown type: $type');

pkgs/swift2objc/test/integration/optional_input.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import Foundation
22

3-
// public func funcOptionalPrimitiveReturn() -> Int? { return 123 }
43
public func funcOptionalClassReturn() -> MyClass? { return MyClass(label: nil) }
54
public func funcOptionalStructReturn() -> MyStruct? { return nil }
65
public func funcOptionalArgs(label param: MyClass?) -> MyClass { return param! }
76
public func funcMultipleOptionalArgs(
87
label1 param1: MyClass?,label2 param2: Int, label3 param3: MyStruct?){}
8+
public func funcOptionalStrings(str: String?) -> String? { return str; }
99

1010
public var globalOptional: MyStruct?
1111

pkgs/swift2objc/test/integration/optional_output.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ import Foundation
1717
return MyClassWrapper(result)
1818
}
1919

20+
@objc static public func funcOptionalStringsWrapper(str: String?) -> String? {
21+
return funcOptionalStrings(str: str)
22+
}
23+
2024
@objc static public func funcOptionalClassReturnWrapper() -> MyClassWrapper? {
2125
let result = funcOptionalClassReturn()
2226
return result == nil ? nil : MyClassWrapper(result!)

0 commit comments

Comments
 (0)