• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift5.x扩展(extension)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
//
//  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()
        }
    }
}



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap