swift 3.0 再探索 - 1.String

swift 3.0 - 1.String

最近有空可以学习点新东西,有段时间在学习java和mySQL,转方向没那么快可以做到,眼下iOS 10 和
Xcode8正式版准备上线,swift3.0也标示着这门语言日渐成熟了。

在中国国内,主流的开发语言还是Objective-C,这个主流主要还是国内用户群的问题,国内很多app都是支持的最低版本是iOS 6.0 到最新的。我在坐地铁和公交的时候,都可以看到很多iPhone 4S,iPhone 5和iPhone 5s,不知道是出于情怀还是前几代的iPhone真的是经久耐用,有这一个群体的存在,app开发就必需考虑系统的适配了,虽然不想Android那么多机型,但是也够你忙的,有很多新的,便捷的API,都无法使用。其中,iOS 7 和iOS 8加入了很多新的便利的API, 比如:iOS 7 NSURLSession,iOS 8 UIAlertController等等新的API和新的控件。由于适配版本跨度的问题,我们在做项目的过程中,很多时候都是采用了旧的API。swift建议运行在 iOS 7以上的系统,你可以运行在iOS 7之前,但是这个apple表示不建议这样做。说实话,我也没有试过到底回发生什么事情。当iOS 10 推出,开发者比较希望看到的是适配的系统跨度可以有iOS 6.0 升到iOS 8.0。关于这一点和iOS 10的适配,可以看看喵神的博客。

swift是一门跨平台的语言,windows下也是可以学习和使用的。疯传了很久的swift for windows,我是没有找到真正的下载地址,但是可以使用IBM制作的Web编译器,在现在编写swift的代码,直接搜索“Swift Sandbox”就可以找到了。

swift3.0--基础类型

一些其它语言都有的类型,就不一一讲解了,主要讲解一下String, Array, Tuples,Dictionary,Struct,Enums:
这一篇先讲String 和 常用的API
在Swift用两个关键字来声明变量var 和 let.

var和let 不是今天的重点,简单理解成:var 是声明一个可以多次赋值的属性(变量),let 是声明一个常量(仅可赋值一次)

  • Swift用String来表示字符串类型.它是Character类型值的集合;
  • 2个字符串可以通过 + 来连接;
  • var声明的字符串,可理解成可变字符,let声明的理解成不可变,不可重复赋值字符串。
  • 声明一个字符串:
//字符串的声明

let str1 = "I am a string"
var str2 = "I am also a string"

let str3 : String = "I am a string"
var str4 : String = "I am also string"

var str5 = "我是中文字符串"
var 中文字符串 = String.init("我也是中文字符串")

var str6 = "123456"

print(str1 + "\n" + str2 + "\n" + str3 + "\n" + str4 + "\n" + str5 + "\n" + 中文字符串 + "\n" + str6)

输出结果如下:

I am a string
I am also a string
I am a string
I am also string
我是中文字符串
我也是中文字符串
123456
  • 空字符串的声明与判断:
let nillStr1 = ""
var nillStr2 = ""

print("空字符串1:\(nillStr1) \n" + "空字符串2:" + nillStr2)

//判读是否为空

let isNill1 = nillStr1.isEmpty
let isNill2 = nillStr2.isEmpty

print(isNill1)
print(isNill2)

//打印结果为:
空字符串1: 
空字符串2true
true
  • 字符串的连接
  • 通过”+”来连接两个字符串,同时支持”+=”
var a = "Swift"
var b = "so esay!!"
var c = a + b
a += " " +  b
print(c)
print(a)

//输出结果:

Swiftso esay!!
Swift so esay!!

//在字符串后追加字符
var a = "Swift so esay"
var char : Character = "!"
a.append(char)

print(a)

//输出结果:
Swift so esay!

//在字符串中插入字符

let name = "咸鱼哥"
let time = "2016年7月28号"
let 车类型 = "D"
let 车次 = 16888
let 票价 = 204
let 出发地 = "广州南"
let 目的地 = "南宁"

let 订票提示 = "旅客\(name)先生, 您在\(time)订购了由\(出发地)开往\(目的地),编号为\(车类型)\(车次)的列车,单程票价是\(票价)元的往返.一共需要支付\(票价 * 2)元."

print(订票提示)
//输出结果:
旅客咸鱼哥先生, 您在2016728号订购了由广州南开往南宁,编号为D16888的列车,单程票价是204元的往返.一共需要支付408元.

//在某个位置插入字符
let vern : Character = "撸"
var str = "老银键盘"
str.insert(vern, at: str.index(str.startIndex, offsetBy: 2))

print(str)
//打印结果
老银撸键盘

//在某个位置插入字符串
let today = "今天,"
let anything = "捡到钱"
let mood = "很开心"
var str = "老银,所以"

str.insert(contentsOf: anything.characters, at: str.index(str.startIndex, offsetBy: 2))
str.insert(contentsOf: today.characters, at: str.startIndex)

str.append(contentsOf: mood.characters)
//--->
//str.insert(contentsOf: mood.characters, at: str.endIndex)

print(str)
//打印结果
今天,老银捡到钱,所以很开心
  • 字符串的截取
//字符串的截取
var subStr = "I am a string"

//获取某个下标对应的字符
var char1 = subStr[subStr.index(subStr.startIndex, offsetBy: 2)]
print(char1)
//获取某个下标后一位对应的字符
var char2 = subStr[subStr.index(after: subStr.index(subStr.startIndex, offsetBy:2))]
print(char2)
//打印结果
a
m

//截取某一个范围的字符

var resultStr1 = subStr[subStr.index(subStr.endIndex, offsetBy: -6)..<subStr.endIndex]
print(resultStr1)

var resultStr2 = subStr[subStr.index(subStr.startIndex, offsetBy:0)..<subStr.index(subStr.endIndex, offsetBy: -3)]
print(resultStr2)

//打印结果:
string
I am str

//获取某个子串在父串中的范围
var subStr = "I am a string"
let sonStr =  "am"
var range = subStr.range(of: sonStr) 
//在sandbox 上报错了,稍后验证再更新;在Xconde 8-beta 3上面,range是一个range<index>?的类型,需要解包

print(range)

//根据index和range删除字符
var subStr = "I am a string"

var result1 = subStr.remove(at: subStr.index(before:subStr.endIndex))
print(result1)
print(subStr)

//打印结果:g     I am a strin

var result2 = subStr.remove(at: subStr.index(subStr.startIndex, offsetBy: 2))
print(result2)
print(subStr)

//打印结果:a    I m a strin

subStr.removeSubrange(subStr.startIndex...subStr.index(subStr.startIndex, offsetBy: 2))
print(subStr)

//打印结果:a strin
  • 字符串其它操作
var targetStr = "I am a string"
//全部转大写
targetStr = targetStr.uppercased()
print(targetStr)
//打印结果:I AM A STRING

//全部转小写
targetStr = targetStr.lowercased()
print(targetStr)
//打印结果:i am a string


//判段两个字符串是否相等
let str1 = "diao zha tian le"
let str2 = str1
let str3 = "diao zha tian le"

let result1 = str1 == str2
print(result1) // true

let result2 = str1 == str3
print(result2) // true
  • 总结:
- String.Index 不是简单的int类型,可以理解为一个字符串字符的下标。
- 声明一个Index, String.index(String.startIndex/.endIndex(从头部/尾部开始), offsetBy: N(偏移多少个字符, 从头部开始输入正数, 从尾部开始输入负数) )。e.g string.index(string.startIndex, offsetBy: 2)
- ‘…’ , ‘..<’用于表示一个范围内的变化。
- remove的方法,部分会放回被删除的字符,原字符串会变成新字符串。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值