Swift开篇010->下标

PART_ONLY 下标(subscript)

  1. 简介

    • 下标可定义在类、结构体、枚举中,是访问集合、列表、序列元素的快捷方式
  2. 语法格式

    • 下标了设定为读写或只读

      // 读写
      subscript(index: Int) -> Int {
          get {
            // 返回一个适当的 Int 类型的值
          }
      
      	// newValue 类型与下标返回类型相同
          set(newValue) {
            // 执行适当的赋值操作
          }
      }
      
      // 只读
      subscript(index: Int) -> Int {
          // 返回一个适当的 Int 类型的值
      }
      
  3. 演示

    struct TimesTable {
        let multiplier: Int
        
        // 只读的下标
        subscript(index: Int) -> Int {
            return multiplier * index
        }
    }
    
    let threeTimesTable = TimesTable(multiplier: 3)
    // threeTimesTable[6] 的值为 18
    
  4. 下标用法举例(Dictionary)

    • 本例通过下标返回将可选类型(Int?)

    • 通过下标删除键对应的值:将键对应的值赋值为 nil 即可

      var animals = ["spider": 8, "ant": 6, "cat": 4]
      // 通过下标插入新的键值对
      animals["bird"] = 2
      
  5. 下标选项

    • 下标可接受任意数量、类型的入参,下标的返回值也可是任意类型

    • 下标可使用变量入参和可变参数,但不能用输入输出参数,也不能给参数设置默认值

    • 类或结构体可提供多个下标实现,使用时通过入参的数量和类型自动匹配

    • 下为矩形结构体的案例

      struct Matrix {
          // 行列
          let rows: Int, columns: Int
          // 根据行列,得到数组值
          var grid: [Double]
          
          init(rows: Int, columns: Int) {
              self.rows = rows
              self.columns = columns
              
              grid = Array(count: rows * columns, repeatedValue: 0.0)
          }
          
          // 角标越界判断
          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, column: column), "Index out of range")
                  return grid[(row * columns) + column]
              }
              set {
                  assert(indexIsValidForRow(row, column: column), "Index out of range")
                  grid[(row * columns) + column] = newValue
              }
          }
      }
      
      // 构造 2*2 的矩阵实例
      var matrix = Matrix(rows: 2, columns: 2)
          
      matrix[0, 1] = 1.5 // 赋值
      matrix[1, 0] = 3.2 // 赋值
          
      let someValue = matrix[2, 2]
      // 越界:断言触发
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接下来继续讲解devstack自动部署OpenStack之localrc文件及遇到的问题解决。 4. 配置网络 若你想使用ovs网络,可以在localrc中配置如下: ```bash # ovs bridge name Q_BRIDGE_NAME=br-ex # ovs physical interface name PHYSICAL_INTERFACE_NAME=eth0 # the IP address of the ovs bridge PUBLIC_NETWORK_GATEWAY=192.168.1.1 ``` 5. 配置Horizon 如果你想要使用Horizon,可以在localrc中进行配置: ```bash # enable horizon enable_service horizon # set horizon theme HORIZON_THEME=mytheme ``` 6. 配置Swift 如果你需要使用Swift,可以在localrc中进行配置: ```bash # enable swift enable_service swift # set swift hash SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5 ``` 7. 配置Cinder 若你需要使用Cinder,可以在localrc中进行配置: ```bash # enable cinder enable_service cinder c-api c-sch c-vol # set volume group name VOLUME_GROUP="stack-volumes" # set cinder backend driver CINDER_VOLUME_BACKEND=LVM # set cinder volume name CINDER_VOLUME_NAME=cinder-volumes ``` 8. 配置Glance 如果你需要使用Glance,可以在localrc中进行配置: ```bash # enable glance enable_service glance # set Glance backend driver GLANCE_BACKEND=file # set Glance image directory GLANCE_IMAGE_DIRECTORY='/opt/stack/data/glance/images/' ``` 以上是常见的localrc配置,当然你还可以根据自己的需求进行调整和配置。 遇到的问题及解决方法: 1. 如果出现了“No module named MySQLdb”错误,需要安装MySQL-python: ```bash sudo apt-get install python-mysqldb ``` 2. 如果出现了“No module named pbr”错误,需要安装pbr: ```bash sudo pip install pbr ``` 3. 如果出现了“Could not determine a suitable URL for the plugin”错误,需要在本地安装git: ```bash sudo apt-get install git ``` 4. 如果出现了“Failed to discover available identity versions”错误,需要检查是否正确配置了keystone的服务地址和端口号。 5. 如果出现了“ERROR:openstack.cli.command:”错误,需要在local.conf中添加如下内容: ```bash # keystone endpoint KEYSTONE_SERVICE_URI=http://127.0.0.1:5000/v2.0/ ``` 本文介绍了devstack自动部署OpenStack之localrc文件及遇到的问题解决。希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值