• 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使用Cocoa中的数据类型教程

Swift使用Cocoa中的数据类型教程

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

通过本文主要向大家介绍了swift与cocoa框架开发,swift cocoa,cocoa是什么意思,cocoa,cocoa soft等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

作为对 Objective-C 互用性(互操作性)的一部分,Swift提供快捷高效的方式来处理Cocoa数据类型。

Swift 会自动将一些 Objective-C 类型转换为 Swift 类型,以及将 Swift 类型转换为 Objective-C 类型。在 Objective-C 和 Swift 中也有一些具有互用性的数据类型。那些可转换的数据类型或者具有互用性的数据类型被称为bridged数据类型。举个例子,在 Swift 中,您可以将一个Array值传递给一个要求为NSArray对象的方法。你也可以转换一个 bridged 类型和它的副本。当你使用as转换 bridged 类型或者那些由常量和变量所提供的类型时,Swift 会桥接它们的数据类型。

Swift 也提供一种简单便捷的覆盖方法来连接 Foundation 的数据类型,在后面的 Swift 语言中,你能在它的句法中感受到自然和统一。

字符串

Swift会在String类型和NSString类型中自动转换。这意味着在可以使用NSString对象的地方,您可以使用一个属于 Swift 的String类型代替它,这样做会同时拥有它们数据类型的特点,String类型的插值,基于Swift设计的APIs以及NSString类更广的适用范围。因此,您几乎不必再在你的代码中使用NSString类。事实上,当 Swift 接入 Objective-C APIs 时,它将把所有NSString类型替换为String类型。当您在您的Objective-C代码中使用 Swift 类时,接入的API会将所有String类型替换成NSString类型。

为了允许字符串转换,只需接入Foundation。举个例子,您在 Swift 的一个字符串中调用了capitalizedString--一个NSString类的方法,此后 Swift 会自动将String转换为一个NSString对象并调用方法。这个方法甚至会返回一个 Swift 的String类型,因为它在接入的时候被替换了。
import Foundation
let greeting = "hello, world!"
let capitalizedGreeting = greeting.capitalizedString
// capitalizedGreeting: String = Hello, World!
</div>

如果您确实需要用到一个NSString对象,您可以用一个 Swift 的String值并转换它。String类型总是可以从一个NSString对象转换为一个Swift的String的值,因此,再没有必要去使用一个可选的类型转换器()as?)。您也可以再一个字符串中通过定义常量和变量来创建一个NSString对象。
import Foundation
let myString: NSString = "123"
if let integerValue = (myString as String).toInt()){
    println("\(myString) is the integer \(integerValue)")
}
</div>

本地化

在Objective-C中,常用NSLocalizedString类的宏来定位一个字符串。这集合的宏包括NSLocalizedStringFromTableInBundle和NSLocalizedStringWithDefaultValue。而在Swift中,只用一个函数就可以实现跟整个NSLocalizedString集一样的功能,即NSLocalizedString(key:tableName:bundle:value:comment:)。这个NSLocalizedString函数分别为tableName,bundle和value参数提供了一个默认值。你可以用它来替换宏。

数字

Swift会自动将已确定的数字类型Int和Float转换为NSNumber。这样的转换允许你基于其中一种类型创建一个NSNumber:
let n = 42
let m: NSNumber = n
</div>

你也能传递一个Int类型的值,比如传递给一个要求为NSNumber类型的参数。同时需要注意的是,NSNumber可以包含多种不同的类型,因此您不能把它传递给单一的一个Int值。

下面所列出的类型都会自动转换为NSNumber:
UInt
Float
Double
Bool</div>

类集合

Swift 会自动将NSArray和NSDictionary类转换为Swift里等价的类。这意味着你将受益于Swift强大的算法和得天独厚的语法来处理集合--可互相转换的 Foundation 和 Swift 集合类型。

数组

Swift 会在Array类型和NSArray类型中自动转换。当你从一个 Swift 数组转换到一个NSArray对象,转换后的数组是一个AnyObject[]类型的数组。如果某个对象是 Objective-C 或者 Swift 类的实例,或者这个对象可以转换成另一种类型,那么这个对象则属于AnyObject类型的对象。你可以将任一NSArray对象转换成一个 Swift 数组,因为所有 Objective-C 的对象都是AnyObject类型的。正因如此,Swift 的编译器会在接入 Objective-C APIs 的时候将NSArray类替换成AnyObject[]。

当你将一个NSArray对象转换成一个 Swift 数组后,你也可以将数组强制类型转换成一个特定的类型。与从NSArray类转换到AnyObject[]不同的是,从AnyObject类型的对象转换成明确的类型并不会保证成功。由于直到运行时编译器才知道AnyObject的对象能否被强制转换为特定的类型,因此,从AnyObject[]转换为SomeType[]会返回一个optional的值。举个例子,如果你知道一个Swift数组只包含UIView类的实例(或者一个UIView类的子类),你可以将AnyObject类型的数组元素强制转换为UIView对象。如果Swift数组中得元素在运行时不是UIView类型的对象,那么转换则会返回nil。

let swiftyArray = foundationArray as AnyObject[]
if let downcastedSwiftArray = swiftArray as? UIView[] {
    // downcastedSwiftArray contains only UIView objects
}
</div>

你也可以在for循环中将NSArray对象定向地强制转换为特定类型的Swift数组:

for aView: UIView! in foundationArray {
     // aView is of type UIView
}
</div>

注意:这种转换是强制转换,如果转换不成功则会在运行时产生错误信息。

当你从 Swift 数组转换为NSArray对象时,Swift 数组里的元素必须是属于AnyObject的。例如,一个Int[]类型的 Swift 数组包含Int结构的元素。Int类型并不是一个类的实例,但由于Int类型转换成了NSNumber类,Int类型属于AnyObject类型的。因此,你可以将一个Int[]类型的Swift数组转换为NSArray对象。如果 Swift 数组里的一个元素不属于AnyObject类型,那么在运行时就会产生错误。

你也可以从 Swift 数组中创建一个NSArray对象。当你将一个常量或变量定义为一个NSArray对象并分配一个数组给它作为实例变量时,Swift 将会创建 NSArray对象,而不是 Swift 数组。
let schoolSupplies: NSArray = ["Pencil", "Eraser", "Notebkko"]
// schoolSupplies is an NSArray object containing NSString objects
</div>

上面的例子中,Swift 数组包含包含三个String字符串。由于从String类型转换为NSString类,数组字面量被转换成一个NSArray对象,并成功分配给schoolSupplies变量。

当您在 Objective-C 代码中使用 Swift 类或者协议时,接入的API会将全部所有类型的Swift数组代替为NSArray。若您将一个NSArray对象传递给Swift的API并要求数组元素为一个新的类型,运行时就会产生错误。如果 Swift API 返回一个不能被转换为NSArray类型的 Swift 数组,错误也会随之产生。

Foundation数据类型

Swift 也提供一种简单便捷的覆盖方法来连接定义在 Foundation 框架中的数据类型。在NSSize和NSPoint中使用覆盖方法,在剩下的 Swift 语言中,你能在它的句法中感受到自然和统一。比如,你可以使用如下语法创建一个NSSize类型的结构:
let size = NSSize(width: 20, height: 40)
</div

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

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

  • Swift、Objective-C、Cocoa混合编程设置指南
  • Swift使用Cocoa中的数据类型教程
  • 在Swift中使用Cocoa的现有设计模式介绍

相关文章

  • 2017-05-28mac git xcrun error active developer path 错误
  • 2017-05-28Swift编程中的初始化与反初始化完全讲解
  • 2017-05-28深入讲解C语言编程中volatile修饰符的作用
  • 2017-05-28gson ajax 数字精度丢失问题的解决方法
  • 2017-05-28Swift中用到extension的一些基本的扩展功能讲解
  • 2017-05-28Swift开发中switch语句值绑定模式
  • 2017-05-28初探Swift3.0带来的变化汇总
  • 2017-05-22Swift 属性
  • 2017-05-28Swift教程之继承详解
  • 2017-05-22Swift 数据类型

文章分类

  • 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 3.1聊天界面键盘效果的实现详解
    • iOS socket网络编程实例详解
    • Swift自定义iOS中的TabBarController并为其添加动画
    • Swift实现Selection Sort选择排序算法的实例讲解
    • Swift 协议
    • 关于swift的个人小结
    • Swift中的可变参数函数介绍
    • 分隔List集合,按指定大小,将集合分成多个的方法
    • Swift开发iOS应用(1)列表的实现_PHP教程

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

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