繁体   English   中英

如何在同一个类的不同方法上重用从for循环派生的变量?

[英]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 ,当selectedIndexnil时,您将需要后退。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM