2

私は見出しの下にある Swift の例に従います。FAQから特定の要素を返し、要素からプロパティを取得する方法はありますか。

FAQ から例を直接コピーしましたが、performAction を呼び出した後でも、textValue は元の値のままです。実際、アクション ブロックで inout パラメーターを何に設定しても、アクションが戻ると、変数は元の値を保持します。

私は何が欠けていますか?ここに私が持っているコードがあります:

func grey_getText(inout text: String) -> GREYActionBlock {
    return GREYActionBlock.actionWithName("get text",
      constraints: grey_respondsToSelector(Selector("text")),
      performBlock: { element, errorOrNil -> Bool in
          text = element.text
          print("in block: \(text)")
          return true
    })
}

そしてテストメソッドで:

var textValue = ""
let domainField = EarlGrey().selectElementWithMatcher(grey_text("Floor One"))

domainField.assertWithMatcher(grey_sufficientlyVisible())
domainField.performAction(grey_getText(&textValue))

print("outside block: \(textValue)")

版画

in block: Floor One
outside block: 

XCode バージョン 7.3.1 を使用しています

4

2 に答える 2

3

gray_getText の正しい実装については、このプル リクエストのコードを確認してください。 https://github.com/google/EarlGrey/pull/139

EarlGrey チームは、ドキュメントが古くなっていることを認識しており、解決策に取り組んでいます.

于 2016-07-07T18:29:20.010 に答える
3
func incrementer(inout x: Int) -> () -> () {
  print("in incrementer \(x)")
  func plusOne() {
    print("in plusOne before \(x)")
    x += 1;
    print("in plusOne after \(x)")
  }
  return plusOne
}

var y = 0;
let f = incrementer(&y)
print("before \(y)")
f();
print("after \(y)")

実行の最後に y が 1 であることを期待しますが、y は 0 のままです。実際の出力は次のとおりです。

in incrementer 0
before 0
in plusOne before 0
in plusOne after 1
after 0

これは、in-out パラメータが「call-by-reference」ではなく「call-by-copy-restore」であるためです。bootstraponline が指す PR が指定するとおりです。

于 2016-07-07T18:53:59.407 に答える