簡體   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