swift 语法学习<一>

let 声明常量,var 声明变量:

var myVar = 42
let myConstant =30

明确声明类型:
var var1:Int;
拼接字符串:
let apples = 3; let fruit = "i have \(apples) apples"
统一[] 创建数组和字典;

      var array = ["heloo", "water"]
        array[1] = "friuit"
        var dict = ["key1":"value1",
            "key2":"value2"]
        dict["key1"] = "vlue3"

创建空数组和字典:

        let empArray = [String]()
        let empDict = [String:Float]()   

类型后面加一个问号来标记这个变量的值是可选的。
var optionStr:String? = "hello"

switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。
if ,for ,switch 后面跟{}

  switch vagetabl
        {
            case "calle":
             print("call")
            case "hello","hello2":
             println("ok sog")
            case let x where x.hasSuffix("pepper"):
            println("write songs")
            default:
            println("nothing")
        }

switch 不需要break语句;
for-in来遍历字典

let interestingNumbers = [ 
"Prime": [2, 3, 5, 7, 11, 13], 
"Fibonacci": [1, 1, 2, 3, 5, 8], 
"Square": [1, 4, 9, 16, 25],]
var largest = 0
for (kind, numbers) in interestingNumbers
 { 
   for number in numbers
  { 
     if number > largest
       {
          largest = number
       } 
  }
}
  for i in 0...5
   {
      //使用..<创建的范围不包含上界,如果想包含的话需要使用...
   }
    var i = 0
    while i<20
    {
    }

函数声明:
使用func来声明一个函数,使用名字和参数来调用函数。使用->来指定函数返回值。函数可以嵌套,可以当做返回值返回,也可以做为参数传入;

func returnFifteen() -> Int {
  var y = 10 
   func add() { 
      y += 5 
  } 
  add() 
  return y
 }
returnFifteen()
func makeIncrementer() -> (Int -> Int)
 {
   func addOne(number: Int) -> Int
     {
     return 1 + number 
     }
     return addOne
}
   var increment = makeIncrementer()

调用 increment(7)

func hasAnyMatches(list: [Int], condition: Int -> Bool) -> Bool
 {
    for item in list
     {
        if condition(item)
        { 
            return true
       }
    }
     return false
   }
   func lessThanTen(number: Int) -> Bool 
   { 
     return number < 10
    }
   var numbers = [20, 19, 7, 12]
  hasAnyMatches(numbers,condition: lessThanTen)

入参声明: conditon:Int -> Bool

函数实际是特殊的闭包,可用{}来创建匿名闭包;

numbers.map({
   (number: Int) -> Int in
       let result = 3 * number
    return result
})

类,使用class声明;每个属性都需要赋值——无论是通过声明(就像numberOfSides)还是通过构造器(就像name)。

class NamedShape
 {
    var numberOfSides: Int = 0
    var name: String
    init(name: String) 
   { 
       self.name = name
   } 
    func simpleDescription() -> String 
   { 
      return "A shape with \(numberOfSides) sides." 
  }
}
class Square : NameShape
{
    var sideLength:Double = 0.0
    init(sideLength:Double,name:String)
    {
        self.sideLength = sideLength;
        super.init(name: name)
        numberOfSlides = 4;
    }
    
    var perimeter:Double
    {
        get
        {
            return 3.0 * sideLength;
        }
        
        set
        {
            sideLength = newValue / 3.0;
        }
      willSet
     {
      triangle.sideLength = newValue.sideLength
      }
      didSet
      {
      triangle.sideLength = newValue.sideLength
      }
    }
    
    func area() -> Double
    {
        return sideLength * sideLength;
    }
    override func simpleDescription() -> NSString {
        return "A square sides of length \(sideLength)."
    }
}

类中方法调用和普通函数区别:
函数的参数名只在函数内部使用,但是方法的参数名需要在调用的时候显式说明(除了第一个参数)。默认情况下,方法的参数名和它在方法内部的名字一样,不过你也可以定义第二个名字,这个名字被用在方法内部。

 class Counter 
  { 
      var count: Int = 0
     func incrementBy(amount: Int, numberOfTimes times: Int) 
{ 
     count += amount * times
  }
}
var counter = Counter()counter.incrementBy(2, numberOfTimes: 7)

类,枚举,结构体都可以实现协议;

使用protocol
来声明一个协议。
protocol ExampleProtocol {
 var simpleDescription: String { get } 
 mutating func adjust()
}
class SimpleClass: ExampleProtocol 
{
    var simpleDescription: String = "A very simple class." 
    var anotherProperty: Int = 69105
    func adjust()
   {
    simpleDescription += " Now 100% adjusted."    
   }
}
var a = SimpleClass()
a.adjust()
let aDescription = a.simpleDescriptionstruct 
SimpleStructure: ExampleProtocol 
{
   var simpleDescription: String = "A simple structure" 
    mutating func adjust() 
  { 
     simpleDescription += " (adjusted)"  
  }
}
  var b = SimpleStructure()
  b.adjust()
  let bDescription = b.simpleDescription

注意声明SimpleStructure时候mutating关键字用来标记一个会修改结构体的方法。SimpleClass的声明不需要标记任何方法因为类中的方法经常会修改类。

使用extension来为现有的类型添加功能,比如新的方法和参数

extension Int:ExamplePro
{
    var simDes:String
    {
        return "the number \(self)"
    }
    mutating func adjust() {
        self += 42
    }
}
        println(7.simDes)

在尖括号里写一个名字来创建一个泛型函数或者类型

 func repeatIem<Item>(item:Item,numberOfTime:Int) ->[Item]
        {
            var result = [Item]()
            for _ in 0..<numberOfTime
            {
                result.append(item)
            }
            return result
        }
        repeatIem("kenow", numberOfTime:4 )
        

http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter1/02_a_swift_tour.html
http://www.cocoachina.com/bbs/read.php?tid-206201.html
http://www.cocoachina.com/bbs/read.php?tid-205308.html
http://www.cocoachina.com/bbs/read.php?tid-204512.html
参考 http://www.cocoachina.com/bbs/thread.php?fid=57

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容