zoukankan      html  css  js  c++  java
  • 下标的使用

    类,结构和枚举类型都可以通过定义下标来访问一组或者一个序列中的成员元素。通过下标索引就可以方便地检索和设置相应的值,而不需要其他的额外操作。

    比如你可以通过someArray[index]来访问数组中的元素,或者someDictionary[key]来对字典进行索引。

    你可以为一个类型定义多个下标,以及适当的下标重载用来根据传递给下标的索引来设置相应的值。下标不仅可以定义为一维的,还可以根据需要定义为多维的,多个参数的。

    下标可以让你通过实例名后加中括号内一个或多个数值的形式检索一个元素。语法和方法语法和属性语法类似,通过使用subscript关键定义,一个或多个输入参数以及一个返回值。

    不同于实例方法的是,下标可以是可读写的或者只读的。这种行为通过一个getter和setter语句联通,就像是计算属性一样。

    //: Playground - noun: a place where people can play
    
    import UIKit
    
    /*
    下标:
    1.所有的swift类型(枚举, 类和结构体)都支持定义下标
    2.同一个类型可以定义多个下标
    3.通过下标的形参列表或者返回值类型来区分不同的下标
    4.同一类型中定义多个不同的下标被称为下标重载
    */
    
    class Person
    {
        var x:Int?
        var y:Int?
        var Int?
        var height:Int?
        
        // 通过下标进行访问时会调用
        // 形参列表, 与参数的形参列表的用法基本相同, 但是不支持指定外部参数和默认值
        // 下标的返回值类型可以是任何有效的类型
        subscript (index: Int) -> Int {
            get{
                switch index {
                case 0:
                    return self.x!
                case 1:
                    return self.y!
                case 2:
                    return self.width!
                case 3:
                    return self.height!
                default:
                    return 0
                }
            }
            
            // 通过下标进行设置时会调用
            set(newValue){
                switch index {
                case 0:
                    self.x = newValue
                case 1:
                    self.y = newValue
                case 2:
                    self.width = newValue
                case 3:
                    self.height = newValue
                default:
                    break
                }
            }
        }
        
        subscript(stringNameKey: String) -> Int? {
            get {
                switch stringNameKey {
                case "x":
                    return self.x!
                case "y":
                    return self.y!
                case "y":
                    return self.width!
                case "y":
                    return self.height!
                default:
                    return nil
                }
            }
        }
    }
    
    var p = Person()
    p.x = 1
    p.y = 2
    p.width = 3
    p.height = 4
    // 通过下标访问属性
    p[0]
    // 通过下标修改属性
    p[1] = 11111
    p.y
    p["x"]
    p["y"]
    

      

  • 相关阅读:
    selenium 在爬虫中的应用
    基于scrapy-redis的第二种形式的分布式爬虫(把普通scrapy框架转成分布式)
    django html 模板继承(下)加精
    django页面之间的前端模板继承或者引入详解(上)
    inclusion_tag 重复页面加载显示模板
    django ForeignKey ManyToManyField OneToOneField
    django建站的注意点
    任务19
    数列求和
    鸡兔同笼2
  • 原文地址:https://www.cnblogs.com/Rinpe/p/5182151.html
Copyright © 2011-2022 走看看