簡體   English   中英

正則表達式替換CGRectMake

[英]Regular Expression to replace CGRectMake

由於CGRectMake在swift 3.0中不可用,並且migrator沒有進行轉換,因此我需要手動替換它,並且在我的代碼中使用了300次以上,因此任何人都可以在此方面幫助我開發正則表達式,以便我找到並替換代碼。 我想做的就是轉換

CGRectMake(a,a,a,a)在這里a是一些值。

CGRect(x:a,y:a,w:a,h:a)

通過此查找:

CGRectMake\(([^,]*),([^,]*),([^,]*),([^,]*)\)

並替換為:

CGRect\(x:\1, y:\2, w:\3, h:\4\)

在記事本中嘗試過++

編輯-使用正則表達式:

CGRectMake\(([^,]*),([^,]*),([^,]*),([a-z|0-9|.|A-Z]*)\)

並替換為

CGRect\(x:\1, y:\2, width:\3, height:\4\)

使用正則表達式無法動態獲取x,y,width,height的值。

所以以上的替代解決方案是

  • 將所有CGRectMake(替換為appdelegateobject.CGRectMakeWrapper("
  • 最后添加"僅”。

意味着在您的情況下,您將CGRectMake(a,a,a,a)替換為appdelegateobject.CGRectMakeWrapper("a,a,a,a"

其中appdelegateobjectappdelegate共享實例對象,您將在其中定義具有string parameter CGRectMakeWrapper函數,如下所示:

func CGRectMakeWrapper(str: String) -> CGRect {

    var rect = CGRectZero

    if(str.characters.count > 0)
    {
        var arr = str.componentsSeparatedByString(",")

        if(arr.count == 4)
        {
            rect = CGRect(x: CGFloat((arr[0] as NSString).doubleValue), y: CGFloat((arr[1] as NSString).doubleValue), width: CGFloat((arr[2] as NSString).doubleValue), height: CGFloat((arr[3] as NSString).doubleValue))
        }

    }



    return rect
}

var rect = "10.0,10.0,100,100" //String


var rect1 = CGRectMakeWrapper(rect)  //CGRect

我已將示例字符串顯示為rect並傳遞給CGRectMakeWrapper函數,該函數將返回一個rect。 您可以在通用類中定義此CGRectMakeWrapper函數,所有類(例如Appdelegate文件)都可以訪問它。

我有一種不同的方法來解決這個問題。

第1步

在下一行

CGRectMake(a,a,a,a) 

只需將CGRectMake替換為CGRectMakeCustom ,一切將看起來像

CGRectMakeCustom(a,a,a,a)

第2步

在項目中創建新的Global函數,如下所示

func CGRectMakeCustom(x: Double, y: Double, width: Double, height: Double) -> CGRect
    {
        return CGRect(x: x, y: y, width: width, height: height)
    }

這樣,您就可以輕松開始在Swift3上進行喚醒

您可以在搜索和搜索時將模式更改為正則表達式:

CGRectMake\\(([^,]*),([^,]*),([^,]*),([^,]*)\\)

應該替換為

CGRect\\(x:\\1, y:\\2, w:\\3, h:\\4\\)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM