Swift - 下標指令碼方法介紹及執行個體

來源:互聯網
上載者:User

標籤:pre   bst   sse   一個   結合   UNC   substring   set   ==   

實現一個我們自定的字串類,可以方便的通過索引擷取某一個字元值,或某一部分字串。同時也可以通過索引,給某一部分賦值。
 

class SubString{    var str:String = ""    init(str:String)    {        self.str = str;    }         /**下標指令碼:擷取/設定部分字串**/    subscript(start:Int, length:Int) -> String        {        get{            let index1 = str.index(str.startIndex, offsetBy: start)            let index2 = str.index(index1, offsetBy: length)            let range = Range(uncheckedBounds: (lower: index1, upper: index2))            return str.substring(with: range)        }        set{            let tmp = str            str = ""            var s = ""            var e = ""            for (idx, item) in tmp.characters.enumerated() {                if(idx < start)                {                    s += "\(item)"                }                if(idx >= start + length)                {                    e += "\(item)"                }            }            str = s + newValue + e        }    }         /**下標指令碼:擷取/設定字元**/    subscript(index:Int) -> String        {        get{            return String(str[str.index(str.startIndex, offsetBy: index)])        }        set{            let tmp = str            str = ""            for (idx, item) in tmp.characters.enumerated() {                if idx == index {                    str += "\(newValue)"                }else{                    str += "\(item)"                }            }        }    }} let str = SubString(str:"baibai.com")print(str[7,3])  //擷取字串:comprint(str[7])  //擷取字元:c str[7,3] = "COM"  //設定部分字串str[0] = "H" //設定部分字元print(str[0,10]) /baibai.COM

 通過類擴充,也可以直接給String類添加索引功能

extension String{    subscript(start:Int, length:Int) -> String        {        get{            let index1 = self.index(self.startIndex, offsetBy: start)            let index2 = self.index(index1, offsetBy: length)            let range = Range(uncheckedBounds: (lower: index1, upper: index2))            return self.substring(with: range)        }        set{            let tmp = self            var s = ""            var e = ""            for (idx, item) in tmp.characters.enumerated() {                if(idx < start)                {                    s += "\(item)"                }                if(idx >= start + length)                {                    e += "\(item)"                }            }            self = s + newValue + e        }    }    subscript(index:Int) -> String        {        get{            return String(self[self.index(self.startIndex, offsetBy: index)])        }        set{            let tmp = self            self = ""            for (idx, item) in tmp.characters.enumerated() {                if idx == index {                    self += "\(newValue)"                }else{                    self += "\(item)"                }            }        }    }} var str = "baibai.com"print(str[7,3])print(str[7]) str[7,3] = "COM"str[0] = "H" print(str[0,10])

 使用一維數組結合下標方法一定程度上類比實現了二維數組

class Matrix {    let rows: Int, columns: Int    var grid: [Double]         init(rows: Int, columns: Int) {        self.rows = rows        self.columns = columns        grid = Array(repeating: 0.0, count: rows * columns)    }         func indexIsValidForRow(row: Int, column: Int) -> Bool {        return row >= 0 && row < rows && column >= 0 && column < columns    }         subscript(row: Int, column: Int) -> Double {        get {            assert(indexIsValidForRow(row: row, column: column), "Index out of range")            return grid[(row * columns) + column]        }        set {            assert(indexIsValidForRow(row: row, column: column), "Index out of range")            grid[(row * columns) + column] = newValue        }    }} let value = Matrix(rows: 20,columns: 20)value[10,10] = 20print(value[10,10])//20

 

Swift - 下標指令碼方法介紹及執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.