swift参考了OC,Rust,Haskell,Ruby,Python,C#等语言的特性。首先,学习这门语言是速学的,我不想浪费太多时间在笔记这门语言和其他语言的哪里不同,特性你自己亲自实践就知道了。下面是我亲自实践总结的一点点皮毛而已。

废话不多说,直接上代码:

1 声明变量和常量

var str: String = "Look what I can do"
var age: Int = 18

let favoriteNumber: Int = 42

代替上面的简单写法就是:

var str = "Look what I can do"
var age = 18

let favoriteNumber = 42

2 字符串声明和初始化或者说是直接赋值

var favoriteGame: String = "Mario Kart"
favoriteGame = "Super Smash Bros"

3 操作符的使用与if语法

let batmanCoolness = 10
var supermanCoolness = 9
let aduamanCoolness = 1
batmanCoolness < supermanCoolness
batmanCoolness > supermanCoolness
supermanCoolness >= 8
batmanCoolness == (supermanCoolness + aduamanCoolness)
batmanCoolness > aduamanCoolness && batmanCoolness == (aduamanCoolness + supermanCoolness)
batmanCoolness < supermanCoolness || aduamanCoolness < supermanCoolness

var spidermanCoolness = 7
(spidermanCoolness + aduamanCoolness) > supermanCoolness
spidermanCoolness == 7 && aduamanCoolness == 2

if(batmanCoolness > spidermanCoolness){

spidermanCoolness = spidermanCoolness - 1

}else if(batmanCoolness >= spidermanCoolness){

spidermanCoolness = spidermanCoolness - 1

}else{

spidermanCoolness = spidermanCoolness + 1
}

if(supermanCoolness < spidermanCoolness)  {
    supermanCoolness = supermanCoolness - 1
    spidermanCoolness = spidermanCoolness + 1
} else if (supermanCoolness == spidermanCoolness)  {
    supermanCoolness = supermanCoolness + 1
    spidermanCoolness = spidermanCoolness + 1
} else  {
    supermanCoolness = supermanCoolness + 1
    spidermanCoolness = spidermanCoolness - 1
}

4 print 语法的使用
print("Hello,World")
print("Ry is awesome")
print(batmanCoolness)

5 字符串插入的使用

var apples = 5
print("Sally has \(apples)apples")
print("Sally has \(apples - 5) apples")

6 可选optional使用(注意:0或者一个具体值)

var optionalNumber: Int? = 5
optionalNumber = nil

if let number = optionalNumber {

print("It is a number")
}
else{

print("It is not a number")
}

7 类型转换

var languagesLearned: String = "3"
var languagesLearnedNum: Int? = Int(languagesLearned)

如:

var tutorialTeam: String = "55"
var editorialTeam = 23

var tutorialTeamNum: Int? = Int(tutorialTeam)

if let numTutorial = tutorialTeamNum  {
    if(numTutorial > editorialTeam)  {
        print("\(numTutorial) is greater than \(editorialTeam)")
    } else if (numTutorial < editorialTeam) {
        print("\(numTutorial) is less than \(editorialTeam)")
    } else  {
        print("\(numTutorial) is equal to \(editorialTeam)")
    }
} else  {
    print("Invalid entry")
}

8 方法的使用

例子:func randomIntBetween(low:Int, high:Int) -> Int {
    let range = high - (low - 1)
    return (Int(arc4random()) % range) + (low - 1)
}

新建项目PeopleDatabase

main.swift

import Foundation

//var newPerson = Person() //创建对象newPerson类的person,等于一个Person对象初始化。即可调用person类
//
//newPerson.enterInfo()
//newPerson.printInfo()

// 加入循环
var response: String
var people: [Person] = [] //创建数组

repeat{

var newPerson = Person()
    newPerson.enterInfo()
    newPerson.printInfo()
    people.append(newPerson)
    newPerson.printInfo()
    
    print("Do you want to enter another name?(y/n)")
    response = input()
}while(response == "y")

print("Number of people in the database: \(people.count)")

for onePerson in people  {
    onePerson.printInfo()
}

新建一个Person类

Person.swift

import Foundation
class Person  {//创建了一个person的类,类不仅有属性,还可以包含方法

var firstName = ""
    var lastName = ""
    var age = 0
    
    func input() -> String {
        let keyboard = NSFileHandle.fileHandleWithStandardInput()
        let inputData = keyboard.availableData
        let rawString = NSString(data: inputData, encoding:NSUTF8StringEncoding)
        if let string = rawString {
            return string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
        } else {
            return "Invalid input"
        }
    }
    
    func changeFirstName(newFirstName:String) { //1创建方法
        firstName = newFirstName
    }
    
    func enterInfo()  {//2创建方法
        print("What is the first name?")
        firstName = input()
        
        print("What is \(firstName)'s last name?")
        lastName = input()
        print("How old is \(firstName) \(lastName)")
        let userInput = Int(input())
        if let number = userInput {
            age = number
        }
    }
    
    func printInfo()  {//3创建方法
//        print("First Name: \(firstName)")
        print("\(firstName) \(lastName) is \(age) years old")
    }

}

记得导入文件helpers.swift的辅助文件

helpers.swif

import Foundation

func input() -> String {
  let keyboard = NSFileHandle.fileHandleWithStandardInput()
  let inputData = keyboard.availableData
  let rawString = NSString(data: inputData, encoding:NSUTF8StringEncoding)
  if let string = rawString {
    return string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
  } else {
    return "Invalid input"
  }
}

func randomIntBetween(low:Int, high:Int) -> Int {
  let range = high - (low - 1)
  return (Int(arc4random()) % range) + (low - 1)
}

9 swift的导入类的时候,不需要导入类的头文件,直接创建类直接就可以调用了,这是和OC特殊的不同点,主要是方便。节省很多开发时间和提高开发效率

10

//常量的声明
let swiftTeam = 13
let iOSTeam = 54
let otherTeams = 48
//变量 的声明和值的改变
var totalTeam = swiftTeam + iOSTeam + otherTeams
totalTeam += 1

let priceInferred = 19.99
let priceExplict: Double = 19.99
let onSaleInferred = true
let onSaleExplicit: Bool = false
let nameInferred = "Whoopie Cushion"
let nameExplicit: String = "Whoopie Cushion"
if onSaleInferred {
  print("\(nameInferred) on sale for \(priceInferred)!")
}else{
 print("\(nameInferred) at regular price: \(priceInferred)!")
}

//类的定义和调用
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 cailcTipWithTipPct(tipPct: Double) -> Double {
        
        return subtotal * tipPct
    }
   
    func printPossibleTips(){
        
        print("15%:\(cailcTipWithTipPct(0.15))")
        print("18%:\(cailcTipWithTipPct(0.18))")
        print("20%:\(cailcTipWithTipPct(0.20))")
    }
    
    func returnPossibleTips() -> [Int: Double] {
        
        let possibleTipsInferred = [0.15,0.18,0.20]
        var retval = [Int: Double]()
        for possibleTip in possibleTipsInferred {
            let intPct = Int(possibleTip * 100)
            retval[intPct] = cailcTipWithTipPct(possibleTip)
        }
        return retval
    }

}
let tipCalc = TipCalculator(total: 33.25,taxPct: 0.06)
tipCalc.printPossibleTips()

11 //Unnamed Tuples元组的使用---无命名

//let tipAndTotal = (4.00,25.19)或者
let tipAndTotal:(Double,Double) = (4.00,25.19)
//元组点语法的访问index(第几个元素)
tipAndTotal.0
tipAndTotal.1
//另外设置一个元组赋值第一个元组,然后访问里面的元素
let(theTipAmt,theTotal) = tipAndTotal
theTipAmt
theTotal

//#####元组的使用 有命名
//let tipAndTotalNamed:(tipAmt:Double, total:Double) = (4.00, 25.19)也可以这样
let tipAndTotalNamed = (tipAmt:4.00,total:25.19)
tipAndTotalNamed.tipAmt
tipAndTotalNamed.total

//#####元组的使用 Returning Tuples
let total = 21.19
let taxPct = 0.06
let subtotal = total/(taxPct + 1)
func calcTipWithTipPct(tipPct:Double) -> (tipAmt:Double,total:Double) {
    
    let tipAmt = subtotal * tipPct
    let finalTotal = total + tipAmt
    return(tipAmt,finalTotal)
}
calcTipWithTipPct(0.20)

12 //A Full Prototype 完整的原型
class TipCalculatorModel {
    
    var total: Double
    var taxPct: Double
    var subtotal: Double {
        get {
            return total / (taxPct + 1)
        }
    }
    
    init(total: Double, taxPct: Double) {
        self.total = total
        self.taxPct = taxPct
    }
    
    func calcTipWithTipPct(tipPct:Double) -> (tipAmt:Double, total:Double) {
        let tipAmt = subtotal * tipPct
        let finalTotal = total + tipAmt
        return (tipAmt, finalTotal)
    }
    
    func returnPossibleTips() -> [Int: (tipAmt:Double, total:Double)] {
        
        let possibleTipsInferred = [0.15, 0.18, 0.20]
        
        var retval = [Int: (tipAmt:Double, total:Double)]()
        for possibleTip in possibleTipsInferred {
            let intPct = Int(possibleTip*100)
            retval[intPct] = calcTipWithTipPct(possibleTip)
        }
        return retval
        
    }
    
}

13 //Protocols
protocol Speaker{
  func Speak()
}
class Vicki: Speaker {
    func Speak() {
        print("Hello, I am Vicki!")
    }
}

class Ray: Speaker {
    func Speak() {
        print("Yo, I am Ray!")
    }
}
class Animal {
}
class Dog : Animal, Speaker {
    func Speak() {
        print("Woof!")
    }
}

14//Optional Protocols
@objc protocol Speak{
  func Speak()
    optional func TellJoke()
}
//If you get an error, make sure to add this line to the top of your playground:import Foundation
//protocol的使用调用
var speaker:Speaker
speaker = Ray()
speaker.Speak()
speaker = Vicki()
speaker.Speak()

15//Delegates

protocol DateSimulatorDelegate {
    func dateSimulatorDidStart(sim:DateSimulator, a:Speaker, b:Speaker)
    func dateSimulatorDidEnd(sim:DateSimulator, a: Speaker, b:Speaker)
}

class DateSimulator {
    
    let a:Speaker
    let b:Speaker
    var delegate:DateSimulatorDelegate?
    
    init(a:Speaker, b:Speaker) {
        self.a = a
        self.b = b
    }
    
    func simulate() {
        delegate?.dateSimulatorDidStart(self, a:a, b: b)
        print("Off to dinner...")
        a.Speak()
        b.Speak()
        print("Walking back home...")
//        a.TellJoke?()
//        b.TellJoke?()
        delegate?.dateSimulatorDidEnd(self, a:a, b:b)
    }
}

swift语言的学习笔记的更多相关文章

  1. 初探swift语言的学习笔记四(类对象,函数)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  2. 初探swift语言的学习笔记七(swift 的关健词)

    每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词: 关键词: 用来声明的: “ class, deinit, enum, extension, func, impor ...

  3. 初探swift语言的学习笔记三(闭包-匿名函数)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29353019 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  4. 初探swift语言的学习笔记十(block)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 转载请注明出处 假设觉得文章对你有所帮助,请通过留言 ...

  5. 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)

    很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或 block了,而叫闭包(closure).下面配合代码来理解一下swi ...

  6. 初探swift语言的学习笔记五(线程)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/30354127 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  7. 初探swift语言的学习笔记十一(performSelector)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  8. 初探swift语言的学习笔记(闭包-匿名函数或block块代码)

    使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...

  9. 初探swift语言的学习笔记四-2(对上一节有些遗留进行处理)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/30314359 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

随机推荐

  1. 使用SoapUI做webservice的模拟系统实例

    实现步骤: 1.打开SoapUI工具,导入工程文件 2.右键生成一个模拟服务 3.由于要考虑到不同的输入返回不同的输出,因此需要写脚本对输入报文进行解释,然后针对输入来判断返回 3.1.建立不同的返回 ...

  2. PHP错误日志控制(display_errors和error_reporting)

    display_errors和error_reporting是php程序调试过程中两个非常重要的参数,下面就来介绍一下这两个错误日志的配置如何开启和关闭: 我们知道在产品的生产环境肯定是不能够显示错误 ...

  3. SeekableByteChannel 和 FileChannel

    Java7中引入了SeekableByteChannel接口,允许我们定位到文件的任意位置进行读写.注意这里的写,不是新增式的插入,而是覆盖,当然在文件末尾的写,是新增. java.nio.chann ...

  4. Log4j配置与使用

    log4j是Java社区事实上的日志标准解决方案.使用起来比较简单. 一. 简单使用 1.下载jar包放到lib文件夹,并加入到build path中: 2.编写log4j.properties文件, ...

  5. python中列表和元组以及字符串的操作

    python中列表是非常好用的.不过有一些使用小细节还需要注意一下. tag[32:-4] 从index为32到tag的倒数第4个字符. 如果索引为32的值在倒数第4个字符的右边,那么将输出为空.只要 ...

  6. MongoDB(一)

    问题解决 1.由于目标计算机积极拒绝 无法连接 原因:还没有启动mongodb,就使用mongo命令 解决方法:在bin目录下输入 mongod --dbpath XXXX/data 然后在输入 mo ...

  7. jsp页面img利用tomcat配置访问服务器绝对路径显示图片

    1.打开tomcat下的server.xml文件,路径\apache-tomcat-7.0.62\conf文件夹下. 2.下<host></host>加入<Context ...

  8. Linux root 密码重置与用户管理

    ---forget root password restart your linux system press 'e' when start. press 'e' again then choose ...

  9. 为TFS配置跨平台的生成服务器Xplat (Ubuntu Linux)

    1. 概述 从TFS 2015开始,微软开始支持跨平台的构建代理.你可以使用TFS的Xplat代理,方便的在基于IOS, Unix和Linux的服务器上搭建生成代理,实现构建.发布等功能.本文档已Ub ...

  10. 票据OCR前预处理 (附Demo)

    发一个去年做的一个去除票据干扰项的demo,核心处理是移除红色印章,不破坏红印叠加处的文字. 只是一个小小demo,还没具体进行进一步优化. 也不知道什么时候才有精力继续优化它. 现在放出来给大家试用 ...