zoukankan      html  css  js  c++  java
  • swift5.x 扩展(extension)

    //
    //  ViewController10.swift
    //  swiftT
    //
    //  Created by wjwdive on 2020/5/25.
    //  Copyright © 2020 wjwdive. All rights reserved.
    //
    
    import UIKit
    
    class ViewController10: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            var someInt = 3
            print("Int 添加了一个 异变方法 求当前Int的平方 ",someInt.square() , someInt)
            
            // extension  为Int 添加方法
            someInt.repeatTask {
                print("Jarvis ")
            }
            
            // extension 为 Double 添加计算属性
            let speed: Double = 12000.0
            print("extension 为 Double 添加计算属性(doubel 转为km)",speed.km)
            
            
        }
    
    }
    
    // Swift 扩展 extension
    // 1、添加计算实例属性和计算类型方法
    // 2、定义实例方法和类型方法
    // 3、提供新初始化器
    // 4、定义下标
    // 5、定义和使用新内嵌类型
    // 6、使现有的类型遵循某协议
    // 7、扩展可以向一个类型添加新的反法,但是不能重写已有的方法    //和OC的不同之处,OC是可以重写已有的方法的
    // 不能添加存储属性
    
    // 2、 扩展可以向已有的类型添加新的初始化器。这允许你扩展其他类型以使初始化器接收你的自定义类型作为形式参数,或提供该类型的原始实现中未包含的额外初始化选项
    // 3、扩展能为添加新的便捷初始化器,但是不能为类添加指定初始化器或反初始化器。指定初始化器和反初始化器必须由原来的实现提供
    
    // 扩展的实例方法仍可修改(或异变)实例本身。结构体和枚举类型方法在修改self或本身的属性时必须标记实例方法为mutating,和原本实现的异变方法一样
    
    
    extension Int{
        mutating func square() {
            self = self * self
        }
    }
    
    
    // 扩展为已有的类型添加新的下标  例如: 通过给整数添加下标,返回整数下标对应的数字
    extension Int {
        subscript(digitIndex: Int) -> Int {
            get{
                var decimalBase = 1
                for _ in 0..<digitIndex {
                    decimalBase *= 10
                }
                return (self / decimalBase) % 10
            }
        }
    }
    
    // 扩展为已有的类、结构体、枚举 添加新的【内嵌类型】  为Int 添加内嵌类型
    extension Int {
        enum Kind {
            case negative, zero, positive
        }
        var kind: Kind {
            switch self {
            case 0:
                return .zero
            case let x where x > 0:
                return .positive
            default:
                return .negative
            }
        }
    }
    
    // extension 为Doubel添加计算属性
    extension Double {
        var km: Double {
            return self / 1000.0
        }
    }
    
    // extension 为Int添加方法
    extension Int {
        func repeatTask(_ task: () -> ()) {
            for _ in 0..<self {
                task()
            }
        }
    }
    
    
    
  • 相关阅读:
    【转】什么是5G?居然有人用漫画把它讲得如此接地气!
    【转】Centos下编译升级安装Boost
    【转】SSH穿越跳板机:一条命令跨越跳板机直接登陆远程计算机
    部署JupyterLab和pyalgotrade搭建web策略回测环境
    [转]Linux中python3.6+ipython+Jupyter Notebook环境
    环境命令备忘
    [转]微软商店 打开就显示无法加载该页面 代码0x80131500?
    [转]Centos 7 安装部署 GitLab 服务器
    [转]本文采用all-in-one(一体化的)安装OpenShift
    [转]Linux编译和安装boost库
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/12957934.html
Copyright © 2011-2022 走看看