SWIFT基础笔记

swift大小写敏感

swift输出方法println()

swift声明变量var 声明常量let  需注意 let常量只能再初始化时进行赋值,var变量可以在任何时候赋值

swift在println中输出多个变量的方法为println(“\(val1),\(val2),…”) 即在双引号中用\(var) 来输出变量

swift对数字整型有Int Int8 Int16 Int32 Int64位几种类型。其中Int会根据当前操作系统自动转换为当前系统位数的整型类型。例如当前系统是32位,则Int 实际上就是Int32

swift获取数据类型范围的方法:以Int整型为例,Int.max为获取该类型的最大值 Int.min为获取该整型的最小值

swift中如果想提高数据可读性的话,可以将1000000写成1_000_000 这样写不会影响程序的执行,又可以提高代码的可读性。

swift设置数据进制:二进制0b  八进制0o 十六进制0x

swift字符串中的转意符 :\0(null字符) , \\(反斜杠),\t(制表符),\n(新行符),\r(回车符),\”(双引号),\’(单引号)

swift单字节Unicode字符,使用\xnn表示,其中nn代表两个十六进制的数

例如:

let str = “\x41″

输出为“A”

swift双字节Unicode字符,使用\unnnn表示,其中nnnn代表4个十六进制数

例如:

let str2 = “\u2600″

输出为*

swift四字节Unicode字符,使用\Unnnnnnnn表示,其中nnnnnnnn代表8个十六进制数

例如:

let str3 = “\U0001F496″

输出为一个特殊字符

swift字符串大小写转换:

let small_string = “abcd”

let big_string = “ABCD”

println(small_string.uppercaseString)

println(big_string.lowercaseString)

如上所示,.uppercaseString为转化为大写 .lowercaseString为转化为小写

swift中的for循环写法:

for key in value{

    println(key)

}

swift返回字符串长度:countElements(string)

swift返回字符串各字符的unicode字符编码:

for c in string.unicodeScalars{

    print(“\(c.value)\n”)

}

swift元数组类型的操作方法:

let name = (value1,vlaue2,value3)

其中,值可以引用其他变量或常量

let (var1,var2,var3) = name

可以将之前定义的元数组中的值,赋值给声明的3个变量,并且按顺序一一对应

let (_,var2,_)=name

如果只取其中某一个,或者多个值时,不需要的的值需要用下划线代替

let name = (var1:value1,var2:value2,var3:value3)

可以在定义元数组时给元素命名,使用时只需要name.var1 调用即可。与javascript非常相似

swift中的nil通过包含另一个值或者包含nil来指明该值不存在。通过在类型后面添加问号(?)来标记一个值为可选 值。例如:var value1:Int?=nil 设置一个可选值。当然,默认情况下,在表达式后加上问号将会自动为变量设定nil值,例如:var value2:Int?

但是需要注意,nil只能赋值给optional类型(即可选类型)。不能直接赋值给非可选类型,例如:var value:Int = nil 这样是错误的。

可选类型的值,访问时需要再转换后的变量后加上! 才可以单独调出可选值中的内容。如下例所示:

var str = “123″

var num:Int? = str.toInt()

var num2 = num! + 100  //输出223

demo中,将字符串str的123转换为Int数字整型,转化为成功后,变量num的实际内容为{some,123} 此时如果使用print打印的画,不会有任何问题。但是不能直接用于计算,如上例:num2中 如果num后没有! 则会报错。因此这里可以理解为,带有可选值的变量后跟上一个!可以将可选值中的有效值提出,并进行计算。

swift自定义类型:

typealias ID = UInt8//自定义类型ID

var max = ID.max //查询类型ID的最大范围

var id:ID = 20; //将id变量的类型设置为ID并将值设置为20.如果超出范围会报错

swift 类型转换:

字符型String 转换为 整型Int时使用 .toInt()方式。如下例子

var str_num:String = “123456″
var int_num:Int? = str_num.toInt()

将字符类型变量str_num转换为Int类型并赋值给int_num。
这里需要注意的时,如果给int_num指定类型的话,必须在类型后面加上?即可选值。因为字符串不确定性很多,很多情况下转化为Int类型时会带有字
符。因此需要为其设置可选值,当转换的字符串型中包含字符时,会显示nil。一般情况下如果不需要给变量指定类型的话,可以不需要加?

例如:var int_num = str_num.toInt()

其他类型转换为字符串型使用toString()的内置方法。如下例子

var int_num2 = 123456

var str_num2 = toString(int_num2)  //转化为字符串”123456″

var str_num3 = toString(true) //将布尔型转换为字符串true

运算时得数据类型转换,简单得记忆方式为,需要转换得类型(变量)。例如要转化为int16类型,则:Int16(int_num2)

如果要转化为Float类型则为:Float(int_num2)

下面列几个数据转换与计算时得一些特性,如下:

var str:Int8 = 100

var str2:Int16 = 200

var str3:Int16 = Int16(str) + str2

str为Int8类型,str2为Int16类型。如果两个数字相加的时候,必须先将str转换为Int16格式再相加。因为swift为了避免精度的丢失,需要显式的将Int8类型转换为相同的类型。注意!这里不能将str2转换为Int8格式进行计算。

简单的记忆方法为,可以大转小,不能小转大。

 var intNum:Int = 100

var floatNum = 1.911

var tol = intNum + Int(floatNum)  //输出101

上述例子中,是一个整型与浮点型之间的运算。其中intNum为Int类型,floatNum为Double类型。如果两个类型进行相加的画,必须 将其中一个类型转换为另外一个数据的类型才能正常运算。例中将floatNum转换为Int类型,转换并进行计算后结果为101。说明floatNum通 过类型转换后,将小数点后的数据全部舍弃,使floatNum的值变为1。而变量tol如果不指定任何类型的画,会自动转换为右侧表达式中,正常计算的类 型。

swift中空字符串的声明方式为:var str = “” 或者 var str = String()  判断字符串是否为空的属性为 .isEmpty 使用该属性后,结果以布尔型输出

swfit数组的基本语法为[value1,value2,value3,…..]

swift中数组声明时可以为数组指定类型,也可以不为数组指定类型。

如例:

var gril = [“hanmeimei”,30,“teacher”]

声明的gril数组中包含字符串和数字整型,由于数组没有指定相应的内容类型,因此这样写时合法的。

而如下例:

var gril:String[] = [“hanmeimei”,30,“teacher”]

声明数组时,为数组内容指定了String类型。如果这样设置的话,程序就会报错。因为其中30时整型类实数,如果一定声明类型的话,请务必将数组的内容转换为同一类型.

swift追加与删除数组元素的方法如下例:

var gril = ["hanmeimei","30","teacher"]

gril.append(“china”)  //使用append方法,该方法在数组最后追加一个元素

gril.insert(“female”,atIndex:1)  //使用insert方法,该方法时在数组的指定位置插入一个值。0为起始位置

gril += ["is mother","has one children"]  //使用+=的形式拼接数组,拼接的内容会追加到数组的尾部

gril.removeAtIndex(0) //使用removeAtIndex方法,删除第0个数组元素。该方法的返回值是被删除数组元素的内容,可以将该方法赋值给一个新的变量来获取返回的内容,例如:var str = gril.removeAtIndex(0)  这时候str的值为”hanmeimei”

gril.count  //统计数组的元素个数

swfit中遍历数组的方法有两种:

1.for in 例如:

for key in gril{

println(key)

}

2.有循环变量的遍历方式,可以获得数组的下标,例如:

for (index,value) in enumerate(gril){

println(“下标为\(index),值为\(value)“)

}

此方法首先使用enumerate方法,将gril数组元素处理为元数组类型,即每次遍历都会对应(index,value)进行赋值

swift中字典的基本语法为:[key1:val1,key2:val2,key3:val3,…]

如例:

var city:Dictionary<String,String> = [“key1″:“wuhan”,“key2″:“kunming”,“key3″:“changsha”]

创建一个city的字典,上例中为字典指定了模版,即Dictionary<String,String> 代表指定字典的key为 字符串格式,val也为字符串格式。在这里为字典的key 和 val设置格式时,需要注意所属类型的范围。

city[“key4″] = “guangzhuo”  //向字典中追加key4 值为guangzhou

当然了,修改对应键值的内容,也可以使用这种方法,值需要为指定的键赋值即可

字典也可以使用.count属性来获取字典键值的对数

关于swift删除字典的操作方法,用下面的实例来解说:

if let removeValue = city.removeValueForKey(“key2″){

println(“删除的键值为\(removeValue)“)  //打印kunimng

}else{

    println(“没有找到对应的\”key2\”的键”)

}

上述实例中,使用了removeValueForKey方法。该方法查找key2键,并将其删除,返回其键的值。其中if表达式中,先判断key2是否存在。如果key2存在,返回true,且返回被删除的键值,然后将值赋值给removeValue。

swift对字典的遍历也有两种方法,如下:

1.for in 例如:

for (index,value) in city{

println(“键\(index),值\(value)“)

}

2.遍历键和值的方法:

for citykey in city.keys{

println(citykey)

}
for cityname in city.values{

println(cityname)

}

如上例,遍历key可以使用.keys属性,如果只是遍历值的话可以使用.values属性

实际上,.keys和.values两种属性还可以结合Array()函数将取出的键或值转换为数组,如下:

let cityarray = Array(city.values)  //输出[changsha, guangzhuo, wuhan]

swift分支语句包含以下两种:

if else语句 与其他程序一致,不做介绍。

switch语句,与其他程序有较大的区别,做了很多的优化,此处使用一个实例来说明,如下:

let number = 12

switchnumber{

case 1,2,3,4,5,6,7,8,9,10:

    println(“1-10的数字”)

case11,12,13,14,15,16,17,18,19,20:

    println(“10-20之间的数字”)

default:

    println(“数字不在方案范围之内”)

}

 let number2 = 1_000

switch number2{

case 0 :

    println(“0″)

case 1…10:

    println(“1-10″)

case 11…100:

    println(“11-100″)

case 101…1000:

    println(“101-1000″)

case 1001…10000:

    println(“1001-10000″)

default:

    println(“不在方案范围内”)

}

通过上述两个例子,可以发现swift中的switch语句省去了每个方案的break(实际可以理解为自动加入了break并不显示),切 case方案可以为任何类型的值,都可以进行判断。case支持多个值的筛选,如val1,val2,val3,… 或者 值的范围筛选,如n1…n2

swift的循环语句包含四种:

1.while 语句,与其他程序语句相同,不做介绍

var i = 0

while 100 > i {

    println(i)

    i++

}

2.do while语句

var n = 0

do{

    println(n)

    n++

}while100>n

 

3.for 循环

for var i=0; i<100; i++ {

println(“数字\(i)“)

}

 

4.for in 循环 主要用于遍历

//1.遍历范围

for index in 1…5{

println(index)

}

//2.忽略循环变量,仅用于计算变量,不过一般这种情况更适合用for或者while来处理

let base = 3

let round = 20

var point = 1

for _ in 1…round{

    point *= base

}

println(“point是\(point)“)

 

//3.遍历数组

let array = ["val1","val2","val3"]

for key in array{

println(key)

}

 

//4.遍历字典

var city:Dictionary<String,String> = ["key1":"wuhan","key2":"kunming","key3":"changsha"]

for (index,value) in city{

println(“键\(index),值\(value)“)

}

 

//5.遍历字符串

var str2 = “swift”

for key in str2{

println(key)

}

swift跳转语句

1.continue语句

continue实例,终止当前循环,并执行下面的循环

for var i = 0; i<100; i++ {

if i%10 == 0{

continue;

}

println(i)

}

2.break语句

break实例,终止当前循环,并结束剩余的循环

for var i = 0; i<100; i++ {

if i == 10{

break;

}

println(i)

}

3.fallthrough语句

可以让switch语句中的方案选择继续贯穿下去,类似于其他语言中,case语句后没有加break的效果。

let number2 = 1_000

switch number2{

    case 0 :

    println(“0″)

    case 1…10:

    println(“1-10″)

    case 11…100:

    println(“11-100″)

    case 101…1000:

    println(“101-1000″)

    fallthrough//让方案匹配继续贯穿下去

    case 1001…10000:

    println(“1001-10000″)

    default:

    println(“不在方案范围内”)

}

4.return语句

一般多用于函数中的返回值所用,和其他程序基本类似,不做介绍

swift函数的定义方式,如下实例:

1.无值返回函数

func ourput(name:String,put:String) {

println(“名字\(name),输出\(put)“)

}

2.有值返回函数

func ourput(name:String,put:String) -> String {

println(“名字\(name),输出\(put)“)

return name+put

}

函数参数后面的->String是设定返回函数的类型,如果指定了类型则必须有return语句,有return语句,则必须为返回值设置类型

3.多值返回函数

func many(in1:String,in2:String,in3:Int) -> (set1:String,set2:String,set3:Int){

var str1 = in1,str2 = in2,num = in3

str1 += str2 + String(num)

return (str1,str2,num)

}

println(many(“d1″,“d2″,3))

4.嵌套函数

//嵌套函数

func gotheway(Direction:Bool) -> (Int) -> Int {//返回值实际上是嵌套中的函数指针,所以还要为嵌套函数传入的参数设定类型,即(Int)

func gofront(input:Int) -> Int {return input +  1}

func goback(input:Int) -> Int {return input – 1}

return Direction ? goback : gofront

}

 var currentways = -4

let movetozero = gotheway(currentways > 0) //由于gotheway为假,所以此时的movetozero实际上是嵌套函数中的gofront。注意,此处的gotheways只能传入布尔类型,因为这个函数只有一个布尔类型的参数。只有为函数传入对应的参数后,gotheways函数才会将嵌套的函数返回给movetozero,此时gofront才能通过movetozero这个函数指针正常工作

 whilecurrentways != 0{

    println(currentways)

    currentways = movetozero(currentways)

}/*******************************************************************/

一、常量 & 变量

//常量
let constantsTeam = 1
//变量
var variablesTeam = 2

  尽可能使用常量,这样更清晰并且内存更不容易肾亏。

二、显示/隐式指定类型

//隐式
let inferredTeam = 3
//显式
let explicitTeam:Int = 4

三、字符串输出

//通过\(变量或常量名)来引用组合字符串
println("\(inferredTeam) is bigger than \(variablesTeam)!")

四、类和方法

// 类使用class关键字声明
class TipCalculator {

  // 在类中创建属性
  let total: Double
  let taxPct: Double
  let subtotal: Double

  // 属性必须在声明时赋予一个初始值,或者在initializer里,否则必须声明其为optional(这里使用的是initializer)
  init(total:Double, taxPct:Double) {
    self.total = total
    self.taxPct = taxPct
    subtotal = total / (taxPct + 1)
  }

  // 方法使用func关键字声明,返回Double类型
  func calcTipWithTipPct(tipPct:Double) -> Double {
    return subtotal * tipPct
  }

  // 无返回值方法
  func printPossibleTips() {
    println("15%: \(calcTipWithTipPct(0.15))")
    println("18%: \(calcTipWithTipPct(0.18))")
    println("20%: \(calcTipWithTipPct(0.20))")
  }

}

// 创建类实例对象,通过类实例对象调用类中的方法
let tipCalc = TipCalculator(total: 33.25, taxPct: 0.06)
tipCalc.printPossibleTips()

五、数组和循环

//1
let possibleTipsInferred = [0.15, 0.18, 0.20]
let possibleTipsExplicit:[Double] = [0.15, 0.18, 0.20]

//2
for possibleTip in possibleTipsInferred {
  println("\(possibleTip*100)%: \(calcTipWithTipPct(possibleTip))")
}
//3
for i in 0..<possibleTipsInferred.count {
  let possibleTip = possibleTipsInferred[i]
  println("\(possibleTip*100)%: \(calcTipWithTipPct(possibleTip))")
}

六、字典Dictionary

// 1
func returnPossibleTips() -> [Int: Double] {

  let possibleTipsInferred = [0.15, 0.18, 0.20]
  let possibleTipsExplicit:[Double] = [0.15, 0.18, 0.20]

  // 创建一个空字典
  var retval = Dictionary<Int, Double>()
  for possibleTip in possibleTipsInferred {
    let intPct = Int(possibleTip*100)
    // 赋值给字典
    retval[intPct] = calcTipWithTipPct(possibleTip)
  }
  return retval

}
				
时间: 2024-08-27 07:32:24

SWIFT基础笔记的相关文章

Swift学习笔记(一):基础

一.常量 & 变量 //常量 let constantsTeam = 1 //变量 var variablesTeam = 2 尽可能使用常量,这样更清晰并且内存更不容易肾亏. 二.显示/隐式指定类型 //隐式 let inferredTeam = 3 //显式 let explicitTeam:Int = 4 三.字符串输出 //通过\(变量或常量名)来引用组合字符串 println("\(inferredTeam) is bigger than \(variablesTeam)!&q

从Pitre《Swift 基础教程2nd》开始

看了两天<Learn Objective-C on the MAC> 中文版本<Objective-C基础编程>,大概认真读到了第9章内存管理部分,感觉这语言可比C++简单多了. 第一天,因为有C语言基础的缘故,我在windows 上安装了GNUstep (Objective-C)开发环境,变看电子书籍,边在PC上编译运行树上的示例,几乎一个都没放过,还做了不少笔记. (毕竟作者 Mark Dalrymaple & Scott Knaster 是高屋建瓴,叙述技术娓娓道来,

Swift学习笔记四:数组和字典

最近一个月都在专心做unity3d的斗地主游戏,从早到晚,最后总算是搞出来了,其中的心酸只有自己知道.最近才有功夫闲下来,还是学习学习之前的老本行--asp.net,现在用.net做项目流行MVC,而不是之前的三层,既然技术在更新,只能不断学习,以适应新的技术潮流! 创建MVC工程 1.打开Visual studio2012,新建MVC4工程 2.选择工程属性,创建MVC工程 3.生成工程的目录 App_Start:启动文件的配置信息,包括很重要的RouteConfig路由注册信息 Conten

Swift学习笔记

Apple 新推的Swift已经好几天了.对于向我这样的oc都还没完全琢磨透彻的菜鸟来说--(简直就是福利啊,joke) 看了几天的Swift,只是有了基本的印象.总感觉比较换混乱,可能源自与自己没怎么学过脚本语言.索性,边看边记,加深印象. 本来部分内容源自Apple的<The Swift Programming Language>以及互联网教程.其余内容均为个人理解,不保证正确. 进入正题: 1.Swift是什么? Apple唤他作:雨燕.其实英语过了四级的都应该看出来,Swift还有一层

记录:swift学习笔记0-1

swift还在不断的更新做细微的调整,都说早起的鸟儿有虫吃,那么我们早点出发吧,趁着国内绝大多数的coder们还没有开始大范围普遍应用. 网上有些大神说:swift很简单!我不同意这个观点,假如你用helloword来说它语法精简没错,但是这个简单的例子不能证明它功能简单! 我相信swift语言非常强大,拥有很多OC以前没有的超强大面向对象特性!想用好并不容易! 下面是:比较系统的整理了自己学习swift 的笔记,一方面用作记录,便于以后查阅,也分享给需要的朋友! 我是任海瑞,共勉!我与你还有很

Swift基础语法(常量变量、数据类型、元组、可选、断言等)

Swift 是 iOS 和 OS X 应用开发的一门新语言.然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的. Swift 的类型是在 C 和 Objective-C 的基础上提出的,Int是整型:Double和Float是浮点型:Bool是布尔型:String是字符串.Swift 还有两个有用的集合类型,Array和Dictionary,请参考集合类型. 就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值.在 Sw

Swift学习笔记(11)--类与结构体

类与结构是编程人员在代码中会经常用到的代码块.在类与结构中可以像定义常量,变量和函数一样,定义相关的属性和方法以此来实现各种功能. 和其它的编程语言不太相同的是,Swift不需要单独创建接口或者实现文件来使用类或者结构.Swift中的类或者结构可以在单文件中直接定义,一旦定义完成后,就能够被直接其它代码使用. 注意:一个类的实例一般被视作一个对象,但是在Swift中,类与结构更像是一个函数方法,在后续的章节中更多地是讲述类和结构的功能性. 1.类和结构的异同 类和结构有一些相似的地方,它们都可以

java String 类 基础笔记

字符串是一个特殊的对象. 字符串一旦初始化就不可以被改变. String s = "abc";//存放于字符串常量池,产生1个对象 String s1=new String("abc");//堆内存中new创建了一个String对象,产生2个对象 String类中的equals比较字符串中的内容. 常用方法: 一:获取 1.获取字符串中字符的个数(长度):length();方法. 2.根据位置获取字符:charAt(int index); 3.根据字符获取在字符串中

网络基础笔记——OSI七层模型

OSI七层模型 由于整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等.如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只程序都需要改写.所以我们将整个网络分成数层,每层都有自己独立的功能,而且每层的代码都可以独立撰写,因为相互之间不会干扰.如此一来,当某个小环节出现问题时,只要将该层的代码改写即可.并且这样可以让整个网络层次更加的清晰. 在网络上传输信息就像是一个发包裹的过程,从己方的应用程序开始往第七层的包裹里塞数据,再依次塞到第一层的包