/*

复制,重编辑,自己留着看。

*/

一个字符串String就是一个字符序列,像”hello,world”,”albatross”这样的。Swift中的字符串是用String关键词来定义的,同时它也是一些字符的集合,用Character定义。

Swift的String和Character类型为代码提供了一个快速的,兼容Unicode的字符解决方案。String类型的初始化和使用都是可读的,并且和C中的strings类似。同时String也可以通过使用+运算符来组合,使用字符串就像使用Swift中的其他基本类型一样简单。

1、字符串常量

在代码中可以使用由String预先定义的字符串常量,定义方式非常简单:

let someString = “Some string literal value”

字符串常量可以包括下面这些特殊字符:

空字符\0,反斜杠\,制表符\t,换行符\n,回车符\r,双引号\”和单引号\’

单字节Unicode字符,\xnn,其中nn是两个十六进制数

双字节Unicode字符,\unnnn,其中nnnn是四个十六进制数

四字节Unicode字符,\Unnnnnnnn,其中nnnnnnnn是八个十六进制数

下面的代码给出了这四种字符串的例子:

let wiseWords = "\"Imagination is more important than kNowledge\" - Einstein" 
// "Imagination is more important than kNowledge" - Einstein 演示转义“
let dollarsign = "\x24" // $,Unicode scalar U+0024  演示AscII
let blackHeart = "\u2665" // ♥,Unicode scalar U+2665  
let sparklingHeart = "\U0001F496" //,Unicode scalar U+1F496

2、初始化一个空串

初始化一个空串时有两种形式,但是两种初始化方法的结果都一样,表示空串

var emptyString = "" // empty string literal var anotherEmptyString = String() // initializer Syntax // these two strings are both empty,and are equivalent to each other 千万不要穿越来个 new String()

通过isEmpty属性可以检查一个字符串是否为空

if emptyString.isEmpty { println("nothing to see here") } // prints "nothing to see here"

3、变长字符串

如果使用var关键词定义的字符串即为可修改的变长字符串,而let关键词定义的字符串是常量字符串,不可修改。

var variableString = "Horse" variableString += " and carriage" // variableString is Now "Horse and carriage" let constantString = "Highlander" constantString += " and another Highlander" // this reports a compile-time error - a constant string cannot be modified

4、字符串不是指针,而是实际的值

在Swift中,一个String类型就是一个实际的值,当定义一个新的String,并且将之前的String值拷贝过来的时候,是实际创建了一个相等的新值,而不是仅仅像指针那样指向过去。

同样在函数传递参数的时候,也是传递的实际值,并且创建了一个新的字符串,后续的操作都不会改变原有的String字符串。

5、字符

Swift的字符串String就是由字符Character组成的,每一个Character都代表了一个特定的Unicode字符。通过for-in循环,可以遍历字符串中的每一个字符:

for character in "Dog!" { println(character) } // D // o // g // ! //

你也可以仅仅定义一个单独的字符:

let yenSign: Character = "¥"

6、字符计数

使用全局函数countElements可以计算一个字符串中字符的数量:

let unusualMenagerie = "Koala,Snail,Penguin,Dromedary " println("unusualMenagerie has \(countElements(unusualMenagerie)) characters") // prints "unusualMenagerie has 40 characters"

7、组合使用字符和字符串

String和Character类型可以通过使用+号相加来组合成一个新的字符串

let string1 = "hello" let string2 = " there" let character1: Character = "!" let character2: Character = "?" let stringPlusCharacter = string1 + character1 // equals "hello!" let stringPlusstring = string1 + string2 // equals "hello there" let characterPlusstring = character1 + string1 // equals "!hello" let characterPlusCharacter = character1 + character2 // equals "!?"

也可以使用+=号来组合:

var instruction = "look over" instruction += string2 // instruction Now equals "look over there" var welcome = "good morning" welcome += character1 // welcome Now equals "good morning!"

8、使用字符串生成新串

通过现有的字符串,可以使用如下方法来生成新的字符串:

let multiplier = 3 let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)" // message is "3 times 2.5 is 7.5"

在上面这个例子中,首先使用multiplier这个字符串3,来作为新串的一部分,用(multiplier)添加,同时上面的例子还用到了类型转换Double(multiplier),将计算结果和字符串本身都作为元素添加到了新的字符串中。

9、字符串比较
Swift提供三种方法比较字符串的值:字符串相等,前缀相等,和后缀相等
字符串相等
当两个字符串的包含完全相同的字符时,他们被判断为相等。

let quotation = "We're a lot alike,you and I." let sameQuotation = "We're a lot alike,you and I." if quotation == sameQuotation { println("These two strings are considered equal") } // prints "These two strings are considered equal"

前缀(prefix)相等和后缀(hasSuffix)相等
使用string 类的两个方法hasPrefix和hasSuffix,来
检查一个字符串的前缀或者后缀是否包含另外一个字符串,它需要一个String类型型的参数以及返回一个布尔类型的值。两个方法都会在原始字符串和前缀字符串(或者后缀字符串)之间做字符与字符之间的比对。

下面一个例子中,用一个字符串数组再现了莎士比亚的罗密欧与朱丽叶前两幕的场景。

let romeoAndJuliet = [ "Act 1 Scene 1: Verona,A public place","Act 1 Scene 2: Capulet's mansion","Act 1 Scene 3: A room in Capulet's mansion","Act 1 Scene 4: A street outside Capulet's mansion","Act 1 Scene 5: The Great Hall in Capulet's mansion","Act 2 Scene 1: Outside Capulet's mansion","Act 2 Scene 2: Capulet's orchard","Act 2 Scene 3: Outside Friar LaWrence's cell","Act 2 Scene 4: A street in Verona","Act 2 Scene 5: Capulet's mansion","Act 2 Scene 6: Friar LaWrence's cell" ]

你可以使用hasPrefix(前缀) 方法和 romeoAndJuliet数组 计算出第一幕要表演多少个场景。

var act1SceneCount = 0 for scene in romeoAndJuliet { if scene.hasPrefix("Act 1 ") { ++act1SceneCount } } println("There are \(act1SceneCount) scenes in Act 1") //输出”There are 5 scenes in Act 1”

同理,使用hasSuffix(后缀) 方法去计算有多少个场景发生在Capulet公馆和Friar LaWrence牢房

var mansionCount = 0 var cellCount = 0 for scene in romeoAndJuliet { if scene.hasSuffix("Capulet's mansion") { ++mansionCount } else if scene.hasSuffix("Friar LaWrence's cell") { ++cellCount } } println("\(mansionCount) mansion scenes; \(cellCount) cell scenes") // 输出 "6 mansion scenes; 2 cell scenes”

大小写字符串
你可以从一个String类型的uppercaseString 和 lowercaseString中获得一个字符串的大写或小写。

let normal = "Could you help me,please?" let shouty = normal.uppercaseString // shouty is equal to "Could YOU HELP ME,PLEASE?" let whispered = normal.lowercaseString // whispered is equal to "Could you help me,please?"

10、Unicode
Unicode是编码和表示文本的国际标准。它几乎可以显示所有语言的所有字符的标准形态。还可以从类似于文本文件或者网页这样的外部源文件中读取和修改他们的字符。

Unicode术语
每一个Unicode字符都能被编码为一个或多个unicode scalar。一个unicode scalar是一个唯一的21位数(或者名称),对应着一个字符或者标识。例如 U+0061是一个小写的A (“a”),或者U+1F425是一个面向我们的黄色小鸡

当一个Unicode字符串写入文本或者其他储存时,unicode scalar会根据Unicode定义的格式来编码。每一个格式化编码字符都是小的代码块,称成为code units.他包含UTF-8格式(每一个字符串由8位的code units组成)。和UTF-16格式(每一个字符串由16位的code units组成)

Unicode字符串
Swift 支持多种不同的方式取得Unicode字符串.
你可以使用for-in语句遍历字符串,来获得每一个字符的Unicode编码值。这个过程已经在字符(Working with Characters)描述过了。
或者,下面三个描述中使用合适的一个来获得一个字符串的值
UTF-8字符编码单元集合使用String类型的utf-8属性
UTF-16字符编码单元集合使用String类型的utf-16属性
21位Unicode标量集合使用String类型的unicodeScalars属性
下面的每一个例子展示了不同编码显示由 D,o,g,!

(DOG FACE,或者Unicode标量 U+1F436)字符组成的字符串
UTF-8
你可以使用String类型的utf8属性遍历一个UTF-8编码的字符串。这个属性是UTF8View类型
,UTF8View是一个8位无符号整形(UInt8)的集合,集合中的每一个字节都是UTF-8编码。

for codeUnit in dogString.utf8 { print("\(codeUnit) ") } print("\n") // 68 111 103 33 240 159 144 182

在上面的例子中,前4个十进制codeunit值(68,111,103,33)显示为字符串 D,g 和 ! ,和他们的ASCII编码相同一样。后面4个codeunit的值(240,159,144,182)是DOG FACE字符的4字节UTF-8编码。

UTF-16
你可以使用String类型的utf16属性遍历一个UTF-16编码的字符串。这个属性是UTF16View类型,UTF16View是一个16位无符号整形(UInt16)的集合,集合中的每一个字节都是UTF-16编码。

for codeUnit in dogString.utf16 { print("\(codeUnit) ") } print("\n") // 68 111 103 33 55357 56374

同理,前4个十进制codeunit值(68,g 和 ! ,他们的UTF-16 的codeunit和他们UTF-8的编码值相同。
第5和第6个codeunit值(55357和56374)是DOG FACE字符的UTF-16的代理对编码。他们的值是由值为U+D83D(十进制55357)的高位代理(lead surrogate)和值为U+DC36 (十进制56374)的低位代理(trail surrogate)组成。

Unicode标量
你可以使用String类型的unicodeScalars属性遍历一个Unicode标量编码的字符串。这个属性是UnicodeScalarsView类型,UnicodeScalarsView是一个UnicodeScalar类型的集合。每一个Unicode标量都是一个任意21位Unicode码位,没有高位代理,也没有低位代理。

每一个UnicodeScalar使用value属性,返回标量的21位值,每一位都是32位无符号整形(UInt32)的值:

for scalar in dogString.unicodeScalars { print("\(scalar.value) ") } print("\n") // 68 111 103 33 128054

value属性在前4个UnicodeScalar值(68,33)再一次展示编码了字符 D,g 和 ! 。第五个也是最后一个UnicodeScalar 是DOG FACE字符,十进制为128054,等价于16进制的1F436,相当于Unicode标量的U+1F436。
每一个UnicodeScalar可以被构造成一个新的字符串来代替读取他们的value属性,类似于插入字符串。

for scalar in dogString.unicodeScalars { println("\(scalar) ") } // D // o // g // ! //

swift基础教程——字符和字符串的更多相关文章

  1. Html5 canvas实现粒子时钟的示例代码

    这篇文章主要介绍了Html5 canvas实现粒子时钟的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. HTML5 WebSocket实现点对点聊天的示例代码

    这篇文章主要介绍了HTML5 WebSocket实现点对点聊天的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

  4. ios – 在Swift中将输入字段字符串转换为Int

    所以我非常擅长制作APP广告Swift,我试图在文本字段中做一些非常简单的输入,取值,然后将它们用作Int进行某些计算.但是’vardistance’有些东西不正确它是导致错误的最后一行代码.它说致命错误:无法解开Optional.None解决方法在你的例子中,距离是一个Int?否则称为可选的Int..toInt()返回Int?因为从String到Int的转换可能失败.请参阅以下示例:

  5. 如何在iOS中检测文本(字符串)语言?

    例如,给定以下字符串:我想检测每个声明的字符串中使用的语言.让我们假设已实现函数的签名是:如果没有检测到语言,则返回可选字符串.因此,适当的结果将是:有一个简单的方法来实现它吗?

  6. xamarin – 崩溃在AccountStore.Create().保存(e.Account,“);

    在Xamarin.Forms示例TodoAwsAuth中https://developer.xamarin.com/guides/xamarin-forms/web-services/authentication/oauth/成功登录后,在aOnAuthenticationCompleted事件中,应用程序在尝试保存到Xamarin.Auth时崩溃错误说不能对钥匙串说期待着寻求帮助.解决方法看看你

  7. ios – 将视频分享到Facebook

    我正在编写一个简单的测试应用程序,用于将视频从iOS上传到Facebook.由于FacebookSDK的所有文档都在Objective-C中,因此我发现很难在线找到有关如何使用Swift执行此操作的示例/教程.到目前为止我有这个在我的UI上放置一个共享按钮,但它看起来已禁用,从我读到的这是因为没有内容设置,但我看不出这是怎么可能的.我的getVideoURL()函数返回一个NSURL,它肯定包含视

  8. xcode – 错误“线程1:断点2.1”

    我正在研究RESTAPI管理器.这是一个错误,我无法解决它.我得到的错误在下面突出显示.当我打电话给这个班级获取资源时:我评论的线打印:Thread1:breakpoint2.1我需要修复错误的建议.任何建议都非常感谢解决方法您可能在不注意的情况下意外设置了断点.单击并拖动代表断路器外部断点的蓝色刻度线以将其擦除.

  9. ios – 更改导航栏标题swift中的字符间距

    类型的值有人可以帮我这个或建议一种不同的方式来改变swift中导航栏标题中的字符间距吗?解决方法您无法直接设置属性字符串.你可以通过替换titleView来做一个技巧

  10. ios – 如何从变量访问属性或方法?

    是否可以使用变量作为Swift中方法或属性的名称来访问方法或属性?在PHP中,您可以使用$object->{$variable}.例如编辑:这是我正在使用的实际代码:解决方法你可以做到,但不能使用“纯粹的”Swift.Swift的重点是防止这种危险的动态属性访问.你必须使用Cocoa的Key-ValueCoding功能:非常方便,它完全穿过你要穿过的字符串到属性名称的桥,但要注意:这里是龙.

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部