最近有空可以学习点新东西,有段时间在学习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:
空字符串2:
true
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(订票提示)
//输出结果:
旅客咸鱼哥先生, 您在2016年7月28号订购了由广州南开往南宁,编号为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的方法,部分会放回被删除的字符,原字符串会变成新字符串。