[英]How can I reuse a variable derived from a for-loop in a method on a different method in the same class?
背景:我正在使日歷應用程序自動化,該應用程序包含一個UICollectionView,其中有許多表示時隙的單元格。
我有一個CalendarView類,其中Login類是其超類。 CalendarView類包含我在日歷中使用的所有方法,因此我的測試看起來像這樣
func testMakeAppointment() {
CalendarView()
.moveToCorrectSchedule()
.findEmptyCalendarCell()
.tapNewAppointmentCell()
.enterRegAppointmentInfo()
.tapLatestAppointment()
在我的findEmptyCalendarCell()
我使用一個for循環來定位日歷上可命中的第一個可用單元格。 該方法如下所示:
func findEmptyCalendarCell() ->CalendarView {
let partialCellPath = XCUIApplication().collectionViews.childrenMatchingType(.Other)
let start: UInt = 10
let totalAmountOfCells = partialCellPath.count
for i in start...totalAmountOfCells {
if partialCellPath.elementBoundByIndex(i).otherElements["CalendarCell"].exists == true {
if partialCellPath.elementBoundByIndex(i).otherElements["CalendarCell"].hittable == true {
partialCellPath.elementBoundByIndex(i).otherElements["CalendarCell"].tap()
xctc.pauseForSeconds(1)
}
}
}
return CalendarView()
}
在以下兩種方法中,我點擊找到的單元格,然后輸入約會信息並創建約會。
問題:至此一切都很好。 但是,我現在需要點擊我剛剛創建的約會,以便斷言約會對象現在存在於日歷中。 (這可以在tapLatestAppointment()
方法下完成。
如果我能以某種方式在findEmptyCalendarCell()
的for循環中重用i
變量來點擊用於創建約會的同一單元格,那就太好了。 但不幸的是,我似乎無法找到一種方法來保存此變量以備后用。
誰能幫我找到可能的解決方案嗎? 我嘗試使i
成為UInt類型的類變量,但是由於我在每個方法之后都返回一個CalendarView()的新實例,因此該值始終為nil
:(
先感謝您
當然,更好的模型是如果在每次方法調用之后都沒有返回新的CalendarView
,但是如果您要避免重寫實現,則可以使i
成為全局變量,在任何類外部聲明。 另外,您可以為此創建一個具有靜態屬性的類。
在for
循環中,該值僅在循環內部可用。 如果不是這種情況下,我們將有數以千計的變量漂浮在每個命名空間是使用了大量的應用for
S,內存會得到敲定,這將是一個痛苦的代碼,很坦率地說。
但是,根據您的代碼,您真正想要的不是引用i
,后者在每次迭代時都for
變化,而是一種識別最后一個分接索引的方法。
那么怎么樣:
func findEmptyCalendarCell() ->CalendarView {
let partialCellPath = XCUIApplication().collectionViews.childrenMatchingType(.Other)
let start: UInt = 10
let totalAmountOfCells = partialCellPath.count
for i in start...totalAmountOfCells {
if partialCellPath.elementBoundByIndex(i).otherElements["CalendarCell"].exists == true {
if partialCellPath.elementBoundByIndex(i).otherElements["CalendarCell"].hittable == true {
partialCellPath.elementBoundByIndex(i).otherElements["CalendarCell"].tap()
selectedIndex = i // See below
xctc.pauseForSeconds(1)
}
}
}
return CalendarView()
}
在全局范圍內,在模塊內以及任何方括號之外的任何文件中定義selectedIndex
,如下所示:
var selectedIndex: Int? = nil
然后,在希望所選索引返回nil
任何情況下,只需將其設置為:
selectedIndex = nil
然后,在tapLatestAppointment
,當selectedIndex
為nil
時,您將需要后退。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.