10.7 Swift中subscripts具体实现

        let array = [1,2, 3,4, 5]

        // 我们可以写成这个样子

        let array1: [Int] = [1,2, 3]

        

        let array2:Array<Int> = [1,2, 3]

        

        

        print(array[1])  // 实例对象 [索引] subscripts

        

        

        let dict = ["1" :1]   // key:value,   key hash

        let dict1:Dictionary<String,Int> = ["1" :1]

        

        

        print(dict["1"])

        

        

        /**

         比如我也想构造一个结构体或者类

         可以像以上这样通过实例下标的方式访问,

         Swift是可以做到的。

         

         按住 command键单击点击进入我们可以看到

         

         public subscript(index: Int) -> Element  // array

         

         array.subscript(index)

         

         public subscript(key: Key) -> Value?  // dict

         

         dict.subscript(key)

         

         */


        

        

        

        /**

         subscripts具体实现

         

         */

        

        struct Student {

            let name:String = ""

            var math:Int = 0

            var chinese:Int = 0

            var english:Int = 0

            

            func scoreOf(course:String) -> Int? {

                switch course {

                case"math":

                    returnmath

                case"chinese":

                    returnchinese

                case"english":

                    returnenglish

                    

                default:

                    returnnil

                }

            }

            

            // 自定义的实现该结构体下标访问

            subscript (course:String) -> Int? {

                get {

                    switch course {

                    case"math":

                        returnmath

                    case"chinese":

                        returnchinese

                    case"english":

                        returnenglish

                        

                    default:

                        returnnil

                    }

                }

                

                set {

                    switch course {

                    case"math":

                        returnmath = newValue!

                    case"chinese":

                        returnchinese = newValue!

                    case"english":

                        returnenglish = newValue!

                        

                    default:

//                        return nil

                        print("key wrong")

                    }

                    

                }

            }

        }

        

        var xiaoli =Student.init(math:98, chinese: 97, english:100)

        print(xiaoli.scoreOf(course:"math"))

        // Optional(98)

        

        /**

         那么我们如何能够像数组或者字典一样用这种下标的访问方式

         

         xiaoli["math"]

         */

        

        print(xiaoli["math"])

//        Optional(98)

        

        xiaoli["math"] =99

        

        print(xiaoli["math"])


        

        

        /**

         

         

         subscript (course: String)  -> Int?

         

         参数的类型 和参数的个数有没有要求,以及返回值类型

         

         它的参数可以是任意的,返回值类型也可以是任意的,

         那么参数的个数呢,其实可以做的更复杂一些,比如说下标里面不止一个索引

         

         */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值