首页 > 其他分享 >swift 下标 subscript

swift 下标 subscript

时间:2023-03-10 15:33:03浏览次数:28  
标签:rows 下标 Int column subscript swift columns row


类、结构体、和枚举可以定义下标。它可以作为访问集合,列表或序列成员元素的快捷方式。你可以使用下标通过索引值来设置或检索值而不需要为设置和检索分别使用实例方法。

你可以作为一个类型定义多个下标,并且下标会基于传入的索引值的类型选择合适的下标重载使用,下标没有限制单个纬度,你可以使用多个输入形参来定一下标以满足自定义类型的需求。

下标脚本允许你通过在实例名后面方括号内写一个或多值对该类的实例进行查询。它的语法类似于实例方法和计算属性,使用关键字subscript来定义下标,并且指定一个或多个输入形式参数和返回类型,与实例方法一样,与实例方法不同的是,下标可以是读写也可以是只读的

//: A UIKit based Playground for presenting user interface

import UIKit


struct TimesTable {
let multiplier:Int
subscript(index :Int)-> Int{
return multiplier * index
}
}


let threeTimesTable = TimesTable(multiplier: 3)
print("six times three is \(threeTimesTable[6])")

six times three is 18

下标参数

下标可以接受任意数量的输入形式参数,并且这些输入形式参数可以是任意类型。下标也可以返回任意类型,下标可以使用变量形式参数和可变形式参数,但是不能使用输入输出形式参数,或提供默认形式参数。

//: A UIKit based Playground for presenting user interface

import UIKit

struct Matrix{
let rows:Int,columns:Int
var grid:[Double]
init(rows:Int,columns:Int){
self.rows=rows
self.columns=columns
grid=Array(repeating:0, count: rows*columns)
print(grid)
}

func indexIsValid(row:Int,column:Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
subscript(row:Int,column:Int)->Double{
get {
assert(indexIsValid(row: row, column: column),"Index out of range")
return grid[(row * columns) + column]
}

set {
assert(indexIsValid(row: row, column: column),"Index out of range")
grid[(row * column)+column] = newValue

}
}
}
var matrix = Matrix(rows: 2,columns: 2)
matrix[0,1]=1.5
matrix[1,0]=3.2
print(matrix)

[0.0, 0.0, 0.0, 0.0]

Matrix(rows: 2, columns: 2, grid: [3.2, 1.5, 0.0, 0.0])

 

类型下标

static subscript

实例下标,如果上文描述的那样,你在对应类型的实例上调用下标。你同样也可以定义类型本身的下标。这类下标叫做类型下标,

在类里则使用class 关键字,这样可以允许子类重写父类的下标实现

//: A UIKit based Playground for presenting user interface

import UIKit

enum Planet:Int{
case mercury = 1,venus,earth,mars,jupiter,strun,uranus,neptune
static subscript(n:Int)->Planet{
return Planet(rawValue: n)!
}
}
let mars = Planet[4]
print(mars)

mars

标签:rows,下标,Int,column,subscript,swift,columns,row
From: https://blog.51cto.com/u_14523369/6113216

相关文章

  • swift 函数编程
    读入一个文本,确定所有单词的使用频率并从高到底排序,打印出所有单词以及其频率列表先不解决频率问题先看下不使用高阶函数//:AUIKitbasedPlaygroundforpresentinguse......
  • swift 属性观察者 willset didset 类型属性 class static
    willSet会在该值被存储之前被调用didSet会在一个新值被存储后调用如果你实现了一个willSet观察者,新的属性值会以常量形式参数传递。你可以在你的willSet实现中为这个参数......
  • swift 在实例方法中修改属性 mutating
    结构体和枚举是值类型,默认情况下。值类型不能被自身的实例方法修改。你可以在选在在func关键字前放一个mutating关键字来指定可以修改属性//:AUIKitbasedPlaygroundfor......
  • swift逃逸闭包和自动闭包
    当闭包作为一个实际参数传递给一个函数的时候,并且它会在函数返回之后调用我们就说这个闭包逃逸了,当你声明一个接受闭包作为形式参数的函数时,你可以在形式参数前写@escaping......
  • swift 高阶函数
    map对于原始集合里每一个元素,以一个变换后的元素替换之行程一个新的集合filter对于原始集合里面的每一个元素,通过判断来将其丢弃或者放进新的集合reduce对于原始集合里的每......
  • 21:swift-扩展
      正文/*扩展1:扩展为现有的类、结构体、枚举类型、或协议添加了新功能。这也包括了为无访问权限的源代码扩展类型的能力(即所谓的逆向建模)。扩展和Objec......
  • 18:swift-并发
      正文mportUIKitclassComplicate18VC:UIViewController{overridefuncviewDidLoad(){super.viewDidLoad()view.backgroundColor......
  • 算法训练Day9| LeetCode28. 找出字符串中第一个匹配项的下标(KMP算法)
    28. 找出字符串中第一个匹配项的下标给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果......
  • 15:swift-反初始化器
      正文/*15:初始化1:反初始化在类实例被释放的时候,反初始化器就会立即被调用。你可以是用deinit关键字来写反初始化器,就如同写初始化器要......
  • 13:swift-继承
      正文/*1:类也可以向继承的属性添加属性观察器,以便在属性的值改变时得到通知.2:重写父类的方法:override关键字,可以重写属性和方法3:阻止重写final......