您的位置:首页 > 移动开发 > Swift

自学Swift-斯坦福笔记整理(第四天开始)

2015-05-11 23:22 204 查看
突然发现斯坦福大学的教程,就开始跟着学习.

在swift中,字典和数组不属于类,属于结构体,方法传值传递的是值而不是地址.
swift 结构体和类的区别.类可以继承,结构体传值是传的值,类传递的是引用.
传递数组去方法里.因为参数也为只可读不可修改的let型,所以需要在内部定义一个var变量来取值进行数组内的修改
复制只要不进行修改都不会进行复制,他有一个不知道哪来的指针指向它,直到你修改他,swift才会真的复制
_在swift中表示我不关心这个的通用表达
//protocol
printable 可以对class或者struct有效  这个在enum冒号后是告诉enum需要自己实现这个protocol的内容

Optional 就是enum
enum Optional<T> {
case None
case Some(T)
}
例如
let x:String? = nil
…is
let x = Optional<String>.None

let x:String? = “Hello"
…is
let x = Optional<Sting>.Some(“Hellp”)

Array

var a = Array<String>()
var a = [String]()
Dictionary
var pac10TeamRankings = Dictionary<String,Int>()
…is
var pac10TeamRankings = [String:Int]()
for (key,value) in pac10teamRankings {
println(“\(key),\(value)")
}

Range(三个点…两个点加小于符号)
struct Range<T> {
var startIndex:T
var endIndex:T
}
let array = [1,2,3,4,5,6]
let subArray1 = array[2…3]
let subArray2 = array[2..<3]
for i in [27…103] {}

NSObject 是所有类的父类

NSNumber     //只是一个装数字的类
let n = NSNumber(35.5)
let intversion = n.intValue

[b]NSDate     //存储日期,也可以让你获取当前日期和时间
[/b]

class CalculatorBrain{}     //引用类型
struct Vertex{}     //值类型
enum Op{}
三者都可以放方法,属性等
不同,类有继承的性质

方法
override //重写
final //不能被重写
static(class) func abs(d:Double) -> Double //静态放啊发

Properties(属性) observe
willSet 在设置property值之前被调用 newValue变量这是property将要被设置的新的值
didSet 在设置property值之后被调用 oldValue变量这是property被设置之前的值

Lazy 他只会在被用到的时候才会初始化 特性依然满足 所有属性必须初始化的原则 只有var才可以使用lazy初始化这个特性

Init 初始化
Designated initializer 不能有convenience在他的前面他只能调用父类的Designater initalizer 必须在调用父类的init时候先初始化直接所有的property
convenience initializer 必须而且只能调用本类的designated initializer这类初始化函数不能调用任何父类的初始化函数
failble init
init?(arg1:Type1,…){} 如果失败的话可能会返回nil

AnyObejct主要用于兼容现在OC API和IOS代码
AnyObject的意思是,指向一个对象的指针,一个类的实例
as 强制转换AnyObject
as? 会返回一个可选的
is 检查他是否是一个当前指定类

Functions

Array<T>
+= [T]     //+为一个连接器.后面必须为一个数组不能为单个值
first -> T?     //返回第一个元素
last -> T?     //返回最后一个元素
var a = [a,b,c]
a.appedn(T)
insert(T,atIndex:Int) 
splice(Array<T>,atIndex:Int)//这个方法为将另外一个Array加入到你的Array的中间位置  a.splice([d,e],atIndex:1) [a,d,e,b,c]
removeAtIndex(Int)
removeRange(Range)
replaceRange(Range,[T])//a.replaceRange(0…1,with:[x,y,z]), a = [x,y,z,b] //被替换的元素不一定要和原来的替换数量相同
sort(isOrderedBefore:(T,T) -> Bool) //可以对一个数组排序,排序方法接受一个函数作为参数一个决定两个元素诶放在前面的函数 a.sort{$0 < $1} 可以写成这种闭包函数
filter(includeElement:(T) -> Bool) -> [T] //这方法将你所有不想要的元素过滤掉然后返回给你那个过滤后的Array
map(transform:(T) -> U ) -> [U]//这将原来的Ayyar中的每一个元素映射到一个新的Array 
let stringified:[String] = [1,2,3].map{“\($0)”} //可以将一个int数组映射到一个string数组内
//减少一个值
reduce(initial:U , combine:(U,T) -> U ) -> U//接受一个参数合格参数是自定的初始值,还有一个方法作为参数,
let sum:Int = [1,2,3].reduce(0){$0 + $1}//累加出数组内全部数的和

[b]String
[/b]

String.Index
通过startIndex来获取这个字符串的开始位置
全局方法advance(String.Index,Int)

var s = “Hello"
let index = advance(s.startIndex,2)
s.splice(“abc”,index)

let num = “56.25"
if let decimalRange = num.rangeOfString(“.”){
let wholeNumberPart = num[num.startIndex..<decimalRange.startIndex]
}
removeRange()
description -> String //printable
endIndex -> String.Index
hasPrefix(String) -> Bool
hasSuffix(String) -> Bool
toInt() -> Int?           //no toDouble因为转换为Double需要知道小数点后几位
capitalazedString -> String
lowercaseString -> String
uppercaseString -> String
join(Array) -> String      //“,”.join([“1”,”2”,”3”]) = “1,2,3"
componentsSeparatedByString(string) -> [String] // “1,2,3”.cabs(“,”) = [“1”,”2”,”3”]

Type Conversion//转换

let d:Double = 37.5
let f: Float = 37.5
let x =Int(d)
let xd = Double(x)
let cgf = CGFloat(d)

let a = Array(“abc”) //     a = [“a”,”b”,”c”]
let s = String([“a”,”b”,”c”]) // s = “abc"

let s = String(73)
let s = “\(37.5)"

assert(() -> Bool,”message”)     是一个很有用的debug方法他们接受一个闭包作为其第一参数,

全局方法 参数均可以接受,Array,Dictionary,String的参数
let count = countElements(aCollection)     //计算数量
4000

let sub = dropFirst(aSliceable)     //丢掉第一个
let sub = dropLast(aSliceable)     //移除最后一个
let first = first(aCollection)     //第一个元素
let last = last(aCollection)     //最后一个元素
let prefix = prefix(aSliceable,X:Int)     //返回从头开始规定位置的值
let suffix = suffix(aSliceable,X:Int)      //返回从尾开始规定的值
let reversed:Array = reverse(aCollection)     //字符串反转
let backwardsString = String(reverse(s))     

这笔记为斯坦福大学第四天的课程的笔记,包括前三天的笔记也放在了开头,因为前三头没怎么记录所以很少,笔记从第四天开始记录.记录一次笔记在重做一次那老头的APP试试.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift