用了两晚上的业余时间看了一下苹果的最新开发语言Swift,整理了一下笔记,分享一下。整体来讲确实很好入手的,XCode开发也很方便。
基本知识:
let a = “a” //定义常亮
var b = “b” //定义变量
var b:String = “Hello”; var e:Bool = true //定义带类型的变量
var tus = (“Hello”, 23, 3.14, “aaa”) //定义元组(Tuples)
println(tus.1) //打印元组数据
typealias Vais = String //类型重命名
let d: Vais = “chen”
定义函数:
// 返回多个数据
func getName()->(Stirng, Int){
return (“chen”, 123)
}
var tus2 = getName()
println(tus2.1)
//值类型,引用类型
//值类型:常量变量作为参数传参的时候,传的Copy String
//引用类型:地址
比较运算:
if(1>2){ //与Java相同
……
}
三目运算:
let ageCount = (age<age2) ? age : age2
逻辑运算符: 与Java相同(略)
数组:
var myList = [“aaa”, “bbb”, “ccc”]
var myList:[Int] = [1, 2, 3]
myList[0] = “ddd” //更改数组内值
字典(Dictionaries) //等同于Java中HashMap
var myHash:Dictionary<String, String> = [“key1”:”value1”, “key2”:”value2”, “key3”:”value3”]
println(myHash[“key2”])
循环遍历:
for value in myList{
println(value)
}
for var i = 0; i < 100; i++ {
……
}
条件语句:
if(k > j){
…
}else {
…
}
swich (k) {
case 1…10:
… // 默认会break
fallthrough // 相当于没有break的作用继续往下执行
case 20:
…
default:
…
}
控制传递:
continue
break
fallthrough
定义函数:
// 单返回值
func sayHello(userName:String, age:Int)->String{
return “Zhiguo.Chen”
}
// 无返回值
func printName(){
println(“Zhiguo.Chen”)
}
// 多返回值
func getName()->(name:String, age:Int) {
return (“Chen”, 24)
}
println(getName().name)
// name相当于参数的别名 如果参数前加# 相当于名称即别名
func sayHello(name: userName:String, age:Int)->String{
return “Zhiguo.Chen”
}
sayHello(name: “Chen”, 12) // 调用方式
// 函数参数设定默认值 age 24 调用时可不用传此参数
func sayHello(name: userName:String, age:Int = 24)->String{
return “Zhiguo.Chen”
}
// 多参数函数定义
func countPerson(users:String…) {
for user in users {
…
}
}
// 传变量引用的函数
func changeName(inout name:String){
name = “aaa”
}
var myName = “Chen”
changeName(&myName)
println(myName)
// 函数类型 类型函数
var getHello:(String, Int) -> String = sayHello
中间类型可省略如下:
var getHello = sayHello
// 函数嵌套 在函数里面定义函数 类似于Java内部类
// 闭包 sort(&myList, {$0 > $1}) {}内为匿名函数体
枚举类型:
enum Sex {
case Male
case Female
}
var sex = Sex.Male //赋值
sex = .Female //改值
enum Sex {
case Male(Int, Int)
case Female(String)
}
enum Country {
case China = 1
case Japan = 2
}
var myCountry = Country.China
switch myCountry {
case .China:
println(“China”)
case .Japan:
println(“Japan”)
}
面向对象:
class TV {
var keyCount = “12”
var keyName:String = “Power”
// 自定义构造函数
init(name:String){
self.name = name
}
func openTV()->String {
return “Success”
}
// 析构函数 销毁时定义的
deinit{
name = “”
}
}
var miTV = TV()
println(miTV.keyName)
var myTV = miTV
miTV === myTV // 恒等式(===)比较是否指向同一引用对象 恒不等式(!==)
类的继承:
class MITV:TV {
var name:String{
get{
return self.name
}
set{
if(…){
super.name = “Hello Sundy”
}
}
}
init(name:String) {
super.init(name: name) //调用父类的构造方法
}
override func openTV() -> String{
// 覆盖父类方法
}
}
var myMiTV = MITV(name: “Sunday”)
@final 标注的属性,方法,类都不可能被重写或者继承
结构体:
struct TV{
var keyName = “aaa”
var keyValue = 24
func getKeyNumber()->Int {
return keyName;
}
}
var myTV = TV(keyName: “bbb”, keyValue: 99)
协议(Protocal): 类似于Java接口
protocol Action{
var name:String {
get set
}
func getName()->String
}
class InvokeAction:Action {
}
// 协议类型
var abcProtocol:Action = InvokeAction()
泛型:
func swapValue<T>(inout a:T, inout b:T){
……
}