[英]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.