fix: Add attribute nonnull_error if returning pointer and error from Objective-C #82
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Consider the following Go code with a method that returns a byte array and an error:
gobind creates an Objective-C method which returns
NSData*
and an error:The method signature seen by Swift is
func getData() throws -> Data
. The problem is thatData
is not optional, and when the Objective-C method returns NULL the program crashes. This is the default signature as explained in the Swift documentation: https://clang.llvm.org/docs/AttributeReference.html#swift-errorBut this is not appropriate for gobind since it is valid for Go to return a nil value. We don't want the crash. This pull request updates
asSignature
so that if the method returns an error and the method returns a nullable pointer toNSData
orNSString
, then add thenonnull_error
attribute as explained in the Swift documentation.With this attribute, the method signature seen by Swift is
func getData() throws -> Data?
. When the Go function returns nil, it is returned as a nil optional value without crashing.