Swift - 基本语法

这篇文章是笔者对此篇文章的翻译:这里是原文


一、在swift中的变量和常量

+ 将事物声明称let是最好的,因为这可以让编译器进行优化,否则它将不会进行这些优化。
    var totalTeam = swiftTeam + iOSTeam
    totalTeam += 1

二、隐士和显示类型的比较

  • 到目前为止,你没有隐士的为这些常量或变量设置类型,因为编译器已经能够有能力自动去推断它。
  • 举例来说,因为你给 swiftTeam 设置为13,编译器知道13 是一个 Int 类型,所以它会自动为你将 swiftTeam 设置为 Int 类型。
  • 然而,只要你想要你就能够显式的设置它的类型。尝试用下面这行代码来替换设置swiftTeam:。
    let swiftTeam:Int = 13
  • 你会怀疑是否你应该显示的来设置类型,或者让编译器自动的为你推测它的类型,我们相信最好尽可能让编译器推测类型,因为你将得到一个Swift的主要优点之一:简洁易读的代码。
  • 因为这样,应该选择推断类型的代码:
let swiftTeam  = 13

三、Swift中的基础类型和控制流

  • 到目前为止,你已经看了Int的例子,这是Swift类型应用于整数值,但是会有更多的例子。
  • Float and Doubles:
    有两种类型的小数点类型:FLoat和Double,Double有更多的精度,它会作为默认的小数点推断值,这意味着priceInferred也是一个Double值。
let priceInferred = 19.99
let priceExplicit:Double = 19.99
  • Bool:
    记住在 Swift 中你应该为 bool 值使用 true/false 而不像在 Objective-C 中使用 YES/NO
let onSaleInferred = true
let onSaleExplicit:Bool = false
  • Strings
    Strings是如你所期盼的,不再像Objective-C中使用@了,
let nameInferred = "Whoopie Cushion"
let nameExplicit:String = "Whoopie Cushion"
  • if语句和字符串插值
if onSaleInferred{
    print("\(nameInferred) on sale for \(priceInferred)!")
}else{
    print("\(nameInferred) at regular price: \(priceInferred)!")
}
-  这是一个关于 if 语句的例子,如你在其他语言中所期待的,条件外的括号是可选的,大括号是必须的。
-  这个例子也展示了一个叫字符串插值的新技术。当你想要在 Swift 中用 string 替换一些东西的时候,只需要使用这个语法糖就可以了:***\(your expression)***

四、类和方法

  • 你将创建一个小费计算类将帮你算出在一个饭店中花费的小费。
    • 为了创建一个类,简单的输入 class 键和你所创建类的命名。然后为你的类输入一个 大括号
    • 如果你继承自其他的类,你应该设置以个:然后跟上你父类的名称。注意你不必继承任何类(Objective-C 中你必须设置继承于 NSObject)
1、第一步:声明类
class TipCalculator {
}
- 这就是如何为一个类创建属性,对于变量和常量创建是一样的。这里创建了三个常量。
- 注意:任何你声明的属性当你声明它们的时候必须设置一个初始化的值,或者在你的初始化方法中- 这就是为什么现在会报错的原因。*如果你不想给你的属性一个初始化的值,你需要将他们声明称可选的值。*
2、第二步:声明属性
class TipCalculator {
    let total:Double
    let taxPct:Double
    let subtotal:Double
}
- 这为类创建了一个带两个参数的额初始化器。初始化器在 Swift 中经常被命名位init - 如果你需要的话你能够创建不止一个,但是需要注意的是它们必须携带不同的参数。
- ***注意:你已经给方法的参数和类的属性一样的名称,正因为如此,我们需要用属性自身的前缀做出两个之间的区分。***
- 注意没有属性命名上的冲突,你不必添加自身的关键词,因为编译器能够自动推断出来。
3、为类添加方法
class TipCalculator {
    let total:Double = 0.0
    let taxPct:Double = 0.0
    let subtotal:Double = 0.0
    init(total:Double ,taxPct:Double){
        self.total = total
        self.taxPct = taxPct
        subtotal = total/(taxPct + 1)
     }
}
-  为了声明一个方法,需要用 *func* 关键词。之后添加参数(必须显示的声明类型)标示符,最后列举返回值类型。
4、为类添加方法
class TipCalculator {
    let total:Double = 0.0
    let taxPct:Double = 0.0
    let subtotal:Double = 0.0
    init(total:Double ,taxPct:Double){
        self.total = total
        self.taxPct = taxPct
        subtotal = total/(taxPct + 1)
    }
    func calcTipWithTipPct(tipPct:Double) ->Double {
        return subtotal * tipPct
    }
}
- 这是一个新的去打印三个值的方法
- 注意:当你调用一个实例的方法的时候,第一个参数没用必要命名(但是其余的参数必须命名)。
- 注意:字符串插入是不被限制于打印变量的。你可以拥有各种类型复杂的方法调用和正确操作只要你喜欢。
class TipCalculator {
    let total:Double
    let taxPct:Double
    let subtotal:Double
    init(total:Double ,taxPct:Double){
        self.total = total
        self.taxPct = taxPct
        subtotal = total/(taxPct + 1)
    }
    func calcTipWithTipPct(tipPct:Double) ->Double {
        return subtotal * tipPct
    }
    func printPossibleTips() {
        print("15%: \(calcTipWithTipPct(0.15))")
        print("18%: \(calcTipWithTipPct(0.18))")
        print("20%: \(calcTipWithTipPct(0.20))")
    }
}
  • 数组和 for 循环
class TipCalculator {
    let total:Double
    let taxPct:Double
    let subtotal:Double
    init(total:Double ,taxPct:Double){
        self.total = total
        self.taxPct = taxPct
        subtotal = total/(taxPct + 1)
    }
    func calcTipWithTipPct(tipPct:Double) ->Double {
        return subtotal * tipPct
    }
    func printPossibleTips() {
        let possibleTipsInferred = [0.15,0.18,0.20]
        let possibleTipsExplicit:[Double] = [0.15,0.18,0.20]
//        for possibleTip in possibleTipsInferred{
//            print("\(possibleTip*100)%:\(calcTipWithTipPct(possibleTip))")
//        }
        for i in 0..<possibleTipsInferred.count {
            let possibleTip = possibleTipsInferred[i]
            print("\(possibleTip*100)%: \(calcTipWithTipPct(possibleTip))")
        }
    }
}
let tipCalc = TipCalculator(total: 33.25, taxPct: 0.06)
tipCalc.printPossibleTips()
  • 字典
    • 对这个类做一个长远你的改动。你最好返回一个字典,而非是简单的打印,这将使展示结果变得简单。
func returnPossibleTips() -> [Int:Double]{
    //1
    let possibleTipsInferred = [0.15,0.18,0.20]
    //2
    var retval = [Int:Double]()
    for possibleTip in possibleTipsInferred {
        let intPct = Int(possibleTip*100)
        //3
        retval[intPct] = calcTipWithTipPct(possibleTip)
    }
    return retval
}
  • 最终代码
// 1
class TipCalculator {
  // 2
  let total: Double
  let taxPct: Double
  let subtotal: Double
  // 3
  init(total: Double, taxPct: Double) {
    self.total = total
    self.taxPct = taxPct
    subtotal = total / (taxPct + 1)
  }
  // 4
  func calcTipWithTipPct(tipPct: Double) -> Double {
    return subtotal * tipPct
  }
  // 1
  func returnPossibleTips() -> [Int: Double] {
    let possibleTipsInferred = [0.15, 0.18, 0.20]
    // 2
    var retval = [Int: Double]()
    for possibleTip in possibleTipsInferred {
      let intPct = Int(possibleTip*100)
      // 3
      retval[intPct] = calcTipWithTipPct(possibleTip)
    }
    return retval
  }
}
// 6
let tipCalc = TipCalculator(total: 33.25, taxPct: 0.06)
tipCalc.returnPossibleTips()

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

推荐阅读更多精彩内容

  • YES 2014WWDC发布 常量和变量使用注意 在实际过程中,建议先定义常量,如果需要修改再改变为变量(更加安全...
    南冯阅读 544评论 0 0
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,793评论 1 10
  • 1.新建Xocode Swift 程序 2.(基本使用) 在Swift中没有.h 和.m文件 只有一个.Swift...
    圆小米123阅读 1,637评论 0 7
  • 常量&变量 什么是常量和变量 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用l...
    去兜风喽阅读 565评论 0 0
  • 2010年7月,chirs Lattner 用一年的时间完成了swift的基本框架,于2014年6月分布, 取消了...
    张无忌_阅读 523评论 0 3