Swift学习1

基本语法

数据类型

基本数据类型

Bool Character Int UInt Float Double

UInt8 UInt16 UInt32 UInt64  Int8 Int16 Int32 Int64 

PS: 在32位平台上 ,Int与Int32长度相同;在64位平台上 ,Int与Int64长度相同(UInt也类似)

复合数据类型

数组、字典和元组 范围 枚举 结构体 类

Array [T]  Dictionary Range enum struct class

var shoppingArray = [String]()

var shoppingArray = ["water", "apple", "pine"]

var shoppingDictionary = Dictionary()

var shoppingDictionary = [

      "Index1" : 1,

      "Index2" : 2,

]

let stu1 = (name:"yang", age:20, core:99)

println("show:\(stu1.name) - \(stu1.1)")

let (name,age,core)=("xiao",90,99)

let (name,age,_)=("xiao",90,99)

let r=1..<10    

变量和常量

变量

let声明常量 - var声明变量

var num:Int=1

let  num=2

var optValue:Int?

var optValue:Int!

var optValue:Optional

var optValue:Int?=nil

optValue?.属性

optValue?.方法

optValue?[]   -subscript

字符串模板 "Hello \(变量名)"

optValue!.  认为optValue不为nil,强制解包

字面常量

二进制0b10001

八进制0o21

十六进制0xa1

单字节 Unicode 标量,写成 \xnn,其中 nn 为两位十六进制数。

双字节 Unicode 标量,写成 \unnnn,其中 nnnn 为四位十六进制数。

四字节 Unicode 标量,写成 \Unnnnnnnn,其中 nnnnnnnn 为八位十六进制数。

类型转换

(不许隐式转换)

数字到字符串 

let str1="result="+String(num)

let str1="result=\(num1+num2)"

整型到浮点型

var intValue:Int=10

var doubValue:Double=Double(intValue)

as 类型转换

as!强制类型转换

as?无的话返回一个nil对象,有的话返回可选类型

运算符

条件运算符 问题?答案一:答案二

区间运算符  闭区间 1...5  前闭后开 1..<5   0..cout

恒等运算符  判断两个变量或者常量是否引用同一个实例,还可以判断数组共用相同存储空间          ===       !===

空合运算符 ??  let username = loginName ?? "Guest"

占位运算符 _ 用于解包类型

流程控制

分号 不强制使用分号,但多条语句在同一行必须使用分号隔开

if 可选(也可以是隐式解析) {} else {}

if let v1=v11,v2=v22 {}

switch chvar{

case "a" : let x where x ==0

case "b","c":break

default: print("")

}不存在贯穿,不会从一个case到另一个case(需要贯穿加fallthrough)

for var i=0; i<3; ++i{}

for i in 0...3{}

for i in 0..<3{}

for _ in 0..<3{}

字符串 for ch in str {}

数组     for strtmp in strarray{}

字典     for (index1,value1) in shoppingDictionary{}

while n<100 {}

do{} while n<100

函数

普通函数

func greet(name: String, _ day: String="day1") -> String {} 下划线可省略调用时写外部参数名

func greet() -> Void {}或者func greet() {}

func sum(a:Int, b:Int)->Int{return a++b}

var funcp:(Int,Int)->Int=sum

只有内部参数名,编译器自动为参数创建与内部参数名同名的外部参数名

func mean(numbers: Double...) -> Double{} 可变参数名称为numbers  为[Double]类型

func alignRight(var str: String){ }形参默认为常量

func swapTwoInts(inout a:Int, inout b:Int) {}只能传递变量,有默认值不能标记inout,调用的时候需要在实参前加上&

闭包(类似c++匿名函数)

形式:

{ (parameters) -> returntype in

statements

}

无参数

{statements

}

关键字

lazy   self   super   func   var   let

override

mutating (结构体和枚举)

associatedtype(声明为类型,类似于c++中typename)   

typealias(为声明的类型赋与具体类型,类似于c++中using TextFont = struct TTextFont;)

protocol WeightCalculble { 
    associatedtype WeightType 
    var weight:WeightType{get} 
} 
// 这里weight属性的类型就抛出来了, 便于继承协议的类或结构体来定义 
class iPhone7 : WeightCalculble { 
    typealias WeightType = Double 
    var weight:WeightType{ 
        return 0.1314 
    } 
} 
class ship: WeightCalculble { 
    typealias WeightType = Int 
    let weight: WeightType init(weight: Int) { 
        self.weight = weight 
    } 
} 

构造和析构

init(参数列表) { 初始化代码 }指定构造器

convenience init() { self.init() }便利构造器,无法直接访问属性,必须通过 指定构造器来初始化属性

deinit { 代码 }

参考

https://github.com/iOS-Swift-Developers

 

你可能感兴趣的:(swift)