【问题标题】:What's Objective-C's equivalent of Swift's inout Parameters?Objective-C 相当于 Swift 的 inout 参数是什么?
【发布时间】:2017-07-05 16:27:49
【问题描述】:

我再次开始编写 Objective-C 代码,并试图在 Objective-C 中找到与 Swift 的 inout 参数表示法等效的方法。

func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID158

到目前为止,我了解到:1.inout 与 objc 不兼容。 2.objc 根本没有这样的语言特性。

但是,当我设计我的 API 时,我希望明确此方法正在修改其参数。在Objective-C中有什么好的方法来完成这个吗?谢谢!

【问题讨论】:

  • 参见stackoverflow.com/a/3835935/1187415 示例:您可以在C 中传递指针
  • 首先,除非您有充分的理由,否则请避免使用inout 参数,但在Objective-C 中(如在C 中)您将传递一个指向变量的指针。

标签: objective-c swift


【解决方案1】:

对于 obj-c 和 swift 之间的桥接,您可以将参数放在一个类中并将其传递给:https://stackoverflow.com/a/26288083/78496

你可以在 Obj-C 中做 inout,只是你不经常看到它。

- (void) doThing: (int *) varA andAnother:(int *) varB
{
    int temp = *varA;
    *varA = *varB;
    *varB = temp;
}

然后你可以使用& 调用它来传递引用

int i = 1;
int j = 2;
[self doThing:&i andAnother:&j]

【讨论】:

  • 您的方法无法编译。 int * temp = &i; 应该做什么?
  • 啊,很好。我不会在微型 SO 编辑器中编写我最好的代码 ^__^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-25
  • 2015-11-07
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
相关资源
最近更新 更多