• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > Swift类型创建之自定义一个类型详解

Swift类型创建之自定义一个类型详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了swift报文类型,swift类型转换,taylor swift,swift,swift code是什么意思等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

小伙伴们,Swift中的Bool类型有着非常重要的语法功能,并支撑起了整个Swift体系中的逻辑判断体系,经过老码的研究和学习, Bool类型本身其实是对基础Boolean类型封装,小伙伴们可能咬着手指头问老码,怎么一会Bool类型,一会Boolean类型,其区别在于,前者是基于枚举的组合类型,而后者则是基本类型,只有两种true和false。

####自定义原型

接下老码根据Bool的思想来创建一个OCBool类型,来让小伙伴们了解一下Swift中到底是怎么玩儿的。

来我们先看一下OCBool的定义。

#####代码示例如下:
enum OCBool{
case ocTrue
case ocFalse
}
</div>
#####注意:

代码中第2行和第3行,可以合并到一行写,如苹果官方Blog所写的一样
代码中命名需要注意:OCBool是类型名,所以首字母必须大写,而case中的ocTrue和ocFalse是小类型则需要首字母小写。

####实现默认值

行,我们给了一个漂亮的定义,不过按照传统语言的经验,Bool值默认情况下是假, 所以我们的OCBool也应该如此,我们使用类型扩展技术增加这个默认特性:
extension OCBool{
     init(){
             self =.ocFalse
     }
}
</div>

#####注意:

●代码中第1行:extension关键字,非常强大,小伙伴们可以通过此创造出许多好玩的东西,建议各位去Github上看一个名为“Swiftz”的项目,它将扩展用到了极致。

●代码中第3行:self = .ocFalse语法,刚入门的小伙伴们很迷糊,为什么会有奇怪的点语法,因为大牛Chris在Swift中增加了类型智能推断功能,在苹果Blog中,提到了“Context”概念,就是这个意思,因为这行语句是在枚举OCBool中的,其上下文就是OCBool的定义体,编译器当然知道.ocFalse就是OCBool.ocFalse了,所以这里直接点语法,非常整齐。

现在我们可以使用如下方法使用这个Bool类型。

#####代码示例如下:
var result:OCBool = OCBool()
var result1:OCBool = .ocTrue
</div>

####支持基本布尔型初始化

正如上述代码所述,我们只能通过类型或者枚举项目赋值,这是组合类型的用法,但是编码的日子里,我们总是希望和true,false直接打交道,也就是说,我们希望这么做,

代码示例如下:
var isSuccess:OCBool = true
</div>
如果小伙伴们直接这么用,则会出现如下错误:
/Users/tyrion-OldCoder/Documents/Learning/BoolType/BoolType/main.swift:30:24: Type 'OCBool' does not conform to protocol 'BooleanLiteralConvertible'
</div>
编译器咆哮的原因是,我们的类型没有遵从“布尔字面量转换协议”,接下来修正这个问题,

#####代码示例如下:
import Foundation

println("Hello, World!")

enum OCBool{
    case ocTrue
    case ocFalse
}


extension OCBool: BooleanLiteralConvertible{
static func convertFromBooleanLiteral( value: Bool) ->OCBool{
    return value ? ocTrue : ocFalse
    }
}

var isSuccess:OCBool = true
</div>

#####注意:

代码中的第11行是重点,我的类型OCBool支持了BooleanLiteralConvertible协议,这个协到底是干什么的呢,小伙伴们在Xcode代码编辑器,按住Command键,然后点击第11行中的BooleanLiteralConvertible协议名,则会进入它的定义,

#####其定义如下:
protocol BooleanLiteralConvertible {
    typealias BooleanLiteralType
    class func convertFromBooleanLiteral(value: BooleanLiteralType) -> Self
}
</div>
这个定义中有个类方法convertFromBooleanLiteral,它的参数为BooleanLiteralType类型,也就是我传入的Bool类型, 且返回值为实现这个协议的类型本身,在我们的OCBool类型中,其返回值就是OCBool本身。经过这个定义,我们可以直接对OCBool类型直接进行布尔字面量初始化了。

####支持Bool类型判断

小伙伴们不安分, 肯定想着我怎么用它实现逻辑判断,所以如果你这么写,
#####代码示例如下:
var isSuccess:OCBool = true

if isSuccess {
    println( "老码请你吃火锅!")
}
</div>
你永远吃不到老码的火锅,因为这里编译器会咆哮:
/Users/tyrion-OldCoder/Documents/Learning/BoolType/BoolType/main.swift:27:4: Type 'OCBool' does not conform to protocol 'LogicValue'
</div>

OCBool现在只能用bool类型初始化,而不能直接返回bool型,小火把们还记得在《老码说编程之白话Swift江湖》中,老码多次提到,妈妈再也不担心我们 if a = 1{}的写法了, 因为等号不支持值返回了, 所以在if判断是后面的条件必须有返回值,OCBool没有,所以编译器哭了。我们解决这个问题。
#####代码示例如下:
import Foundation

println("Hello, World!")

enum OCBool{
    case ocTrue
    case ocFalse
}


extension OCBool: BooleanLiteralConvertible{
static func convertFromBooleanLiteral( value: Bool) ->OCBool{
    return value ? ocTrue : ocFalse
    }
}

extension OCBool: LogicValue{
    func getLogicValue() ->Bool {
        var boolValue: Bool{
        switch self{
        case .ocTrue:
            return true
        case .ocFalse:
            return false
            }
       

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift 数据类型
  • Swift 可选(Optionals)类型
  • Swift 类型转换
  • 详解Swift中的数据类型类型转换
  • 实例讲解Swift中引用类型的ARC自动引用计数
  • Swift编程之枚举类型详解
  • Swift编程中的一些类型转换方法详解
  • 深入解析Swift编程中枚举类型的相关使用
  • Swift内置的数字类型及基本的转换方法
  • Swift类型创建之自定义一个类型详解

相关文章

  • 2017-05-28Swift编程之枚举类型详解
  • 2017-05-28使用Swift实现iOS App中解析XML格式数据的教程
  • 2017-05-22Swift 枚举
  • 2017-05-28Swift让输入框跟随键盘弹起避免输入输入法挡住输入框问题
  • 2017-05-28Swift心得笔记之函数
  • 2017-05-28Swift中的指针操作和使用详细介绍
  • 2017-05-28在 Swift 中测试 UIAlertController的方法
  • 2017-05-28Swift 3.0将UILabel数字颜色设置为红色的方法
  • 2017-05-28详解Swift编程中下标的用法
  • 2017-05-28struts2框架入门

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Swift3.0 GCD定时器的使用DEMO
    • ssm框架上传图片保存到本地和数据库示例
    • 分隔List集合,按指定大小,将集合分成多个的方法
    • Swift中的条件判断、循环、跳转语句基础学习笔记
    • Swift 协议
    • Swift 构造过程
    • 详解Swift中的函数及函数闭包使用
    • Swift教程之类与结构详解
    • MyBatis中的模糊查询语句
    • IOS 实现简单的弹幕功能

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有