Swift 语法小结
1. Optional 就是枚举
An Optional is just an enum
enum Optional<T>{
case None
case Some(T)
}
2.Array的声明
var a=Array<String>()
var a=[String]()
let a=[“A”,”B”,”C”]不可改
let b=a[3]
遍历Array可使用for in
for array in a{
println(“\(array)”)
}
3.Dictionary
var dic=Dictionary<String,Int>()
var dic=[String:Int]()
dic=[“title1”:1,”title2”:2]
访问一个dictionary的值将返回Optional
let value=dic[“title3”] 返回nil
使用tuple遍历Dictionary
for (key,value) in dic {
println(“\(key)=\(value)”)
}
4.结构体Range 一个起点,一个终点,称之为合理类型,Range是范型
struct Range<T>{
var startIndex:T
var endIndex:T
}
a.在Array中Range中的类型是Int型,因为Array是通过Int索引 Range<Int>
b.String中时String的索引 Range<String.Index>
c.声明
let array=[“a”,”b”,”c”,”d”]
let subArray1=array[2...3] ([“c”,”d”]) 闭区间
let subArray2=array[2..<3] ([“c”]) 左闭右开区间
遍历
for i in [27…104]{
println(“i=\(i)”)
}
5.NSObject(swift中所有的类都可以继承NSObject)
Objective-C中所有类的基类,比如UIViewController
6.NSNumber 装数字的类
let n=NSNumber(double:35.5)
将会以自身的值转为int或double
let intversion=n.intValue / n.doubleVaule /n.boolValue
7.NSDate 存储日期,也可以获取当前日期和时间
Calendar,DateFormatter,DateComponents
8.NSData 比特包
传递无类型数据,原始数据
9.数据结构 类,枚举,结构
相同点:a.声明类似 b.可以有自己的属性和方法 c.都可以有自己的函数
不同点:a.Enum本身是不能存储任何值的,可以将值存储在枚举的关联信息中
b.枚举可以有计算型属性
c.结构体和类可以初始化
d.类有继承的性质,类型和转化都属于类的性质
e.枚举和结构体是 值传递,类是 引用传递
10.override 重写父类方法的关键字
final 可以将一个方法标为final,表示这个方法不能被重写
11.类和实例都有自己的方法和属性
var d:Double = -10
if d.isSignMinus {//isSignMinus是否是一个负数
d=Double.abs(d) //取绝对值
}
isSignMinus是实例d的变量或者说是d的属性
abs是Double类的方法(所有对象共享),向该方法中传入需要操作的Double类型的实例
类方法 static func abs(d:Double) -> Double
12.参数名
所有方法所有的参数都有一个内部名和外部名
内部名:在方法中拥有一个本地变量的名字,方法中冒号之前的
外部名:调用者准备使用的,调用方法是在冒号之前的
a.使用外部名
func foo(extenal internal:Int){
let local=internal
}
func bar(){
let result=foo(external: 123)
}
b.不使用外部名 _表示会被忽略,所有方法默认是采用该方式
//func foo(internal:Int)
func foo(_ internal:Int){
let local=internal
}
func bar(){
let result=foo(123)
}
c.强制使用内部名 #
func foo(#internal:Int){
let local=internal
}
func bar(){
let result=foo(internal:123)
}
d.非第一个参数推荐使用内部名和外部名,当然,你可以使用_忽略外表名,但这不是标准的做法
func foo(first:Int,externalSencond second:Double){
let local=second
}
func bar(){
let result=foo(123,externalSencond:5.5)
}
13.Property Observers(属性观察)
var someStoredProperty:Int = 42{
willSet{newValue}//属性设置前被调用
didSet{oldValue}//属性设置后被调用,可以用来对用户界面进行更新
}
override var someStoredProperty{
willSet{newValue}
didSet{oldValue}
}
使用场景:a.在自己的类中需存储属性,当其他方法设置它的值时,获得一个通知
b.当继承了某些类,你并不需要对这些类中的属性做什么修改,但当它们改变时你想知道
14.lazy 只有用到的时候才会被初始化
a.如果使用了很多资源,用lazy是不错的选择
lazy var brain=CalculatorBrain()
b.初始化的时候在后面放一个大括号,也就是通过执行这个闭包来初始化这个属性,但这个闭包直有在property被用到的时候才会执行
lazy var someProperty:Type={
return <the constructed vaule>
}()
c.可以使用一个方法来进行初始化,只有标记为lazy才可以这样用,因为在类初始化之前,类中的方法都是不可以被调用的
lazy var myProperty=self.initializeMyProperty()
15.initialization 初始化
a.无父类的类,默认有一个init()方法
b.如果一个结构体没有初始化,它将默认得到一个将所有属性作为参数的初始化方法,不需要实现
struct MyStruct{
var x: Int=42
var y: String=“moltuae”
init(x:Int,y:String)
}
c.在初始化方法里面可以设置任何属性的值,包括常量和变量
d.在类或结构体中可以调用自己的init方法 self.init(),类中可以调用父类的初始化方法 super.init()
版权声明:本文为博主原创文章,未经博主允许不得转载。