• 望其项背 iOS


    项目地址 https://github.com/webabcd/IosDemo
    作者 webabcd

    望其项背 iOS - swift: 方法,下标:实例方法,类方法,self,在方法中修改属性,在方法中为 self 分配一个新的实例,下标 []

    示例如下:

    SwiftView09.swift

    /*
     * 本例用于演示方法,下标
     * 实例方法,类方法,self,在方法中修改属性,在方法中为 self 分配一个新的实例,下标 []
     *
     * [] 是下标运算符(subscript operator)
     */
    
    import SwiftUI
    
    struct SwiftView09: View {
        
        var result: String = ""
        
        init() {
            result = sample1() // 实例方法,类方法,self,在方法中修改属性,在方法中为 self 分配一个新的实例
            result += "
    "
            result += sample2() // 下标 []
            result += "
    "
        }
    
        var body: some View {
            VStack {
                HStack {
                    Text(result)
                    Spacer()
                }
                Spacer()
            }
        }
        
        func sample1() -> String {
            var a = SwiftView09_Struct1()
            
            let b = a.func1()
            let c = a.func2() // 这里要注意一下:因为 func2() 会修改值类型的属性,所以 a 不能是 let 常量
            let d = a.func3()
            
            let e = SwiftView09_Struct1.func4()
            
            return "(b), (c), (d), (e)"
        }
    
        func sample2() -> String {
            var a = SwiftView09_Struct2()
            
            // 设置指定下标的值
            a[100] = "webabcd"
            // 获取指定下标的值
            let b = a[100]
            
            // 下标可以支持多个输入参数
            let c = a[10, 20]
            
            // 类下标
            let d = SwiftView09_Struct2[100]
            
            return "(b), (c), (d)";
        }
    }
    
    struct SwiftView09_Struct1 {
        var name: String = "webabcd"
        
        // 实例方法
        func func1() -> String {
            // self 指的是实例本身(可以省略)
            return self.name
        }
        
        // 如果想在方法中修改属性的话,需要用 immutable 修饰方法,否则编译时报错(Cannot assign to property: 'self' is immutable)
        mutating func func2() -> String {
            self.name = "wanglei" // 可以修改属性了
            return self.name
        }
        
        // 如果想在方法中为 self 分配一个新的实例的话,需要用 immutable 修饰方法,否则编译时报错(Cannot assign to value: 'self' is immutable)
        mutating func func3() -> String {
            self = SwiftView09_Struct1(name: "wangrx") // 可以为 self 分配新的实例了
            return self.name
        }
        
        // 类方法
        static func func4() -> String {
            return "static func"
        }
    }
    
    
    struct SwiftView09_Struct2 {
        private var _dict = [Int : String]()
        // 实例下标,通过 subscript 实现,参见下面的代码
        subscript(index: Int) -> String {
            get {
                return _dict[index] ?? ""
            }
            set (newValue) {
                _dict[index] = newValue
            }
        }
        
        // 下标可以支持多个输入参数
        subscript(rows: Int, columns: Int) -> String {
            get {
                return "rows:(rows), columns:(columns)"
            }
        }
        
        // 类下标
        static subscript(index: Int) -> String {
            return "index: (index)"
        }
    }
    
    

    项目地址 https://github.com/webabcd/IosDemo
    作者 webabcd

  • 相关阅读:
    12-转盘
    11-UIView与核心动画对比
    10-动画组
    09-转场动画
    08-图片抖动(帧动画)
    07-心跳效果
    06-CABasicAnimation基础核心动画
    05-时钟效果
    计时器延迟 NSTimer和CADisplaylink GCD中的延迟
    ScrollView与UIPageController
  • 原文地址:https://www.cnblogs.com/webabcd/p/ios_SwiftView09.html
Copyright © 2020-2023  润新知