In Obj-C, a common practice was to use convenience functions to perform common operations, like configuring auto layout for views:
func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint
{
// Make some constraint
// ...
// Return the created constraint
return NSLayoutConstraint()
}
If you just needed to set the constraint and forget about it, you could call:
[view1 makeConstraint: view2]
If you wanted to store the constraint later so that you could remove/modify it, you would do something like:
NSLayoutConstraint * c;
c = [view1 makeConstraint: view2]
I want to do this in swift, but if I call the above function and do not capture the returned constraint, I get the warning:
Result of call to 'makeConstraint(withAnotherView:)' is unused
VERY annoying. Is there some way to let Swift know that I don't always want to capture the return value?
NOTE: I know about this. It is ugly and not what I'm looking for:
_ = view1.makeConstraint(withAnotherView: view2)
This is behaviour that has been introduced in Swift 3. Instead of having to explicitly annotate functions with @warn_unused_result
in order to tell the compiler that the result should be used by the caller, this is now the default behaviour.
You can use the @discardableResult
attribute on your function in order to inform the compiler that the return value doesn't have to be 'consumed' by the caller.
@discardableResult
func makeConstraint(withAnotherView : UIView) -> NSLayoutConstraint {
... // do things that have side effects
return NSLayoutConstraint()
}
view1.makeConstraint(view2) // No warning
let constraint = view1.makeConstraint(view2) // Works as expected
You can read about this change in more detail on the evolution proposal.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With