swift语言的学习笔记
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语言的学习笔记的更多相关文章
- 初探swift语言的学习笔记四(类对象,函数)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记七(swift 的关健词)
每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词: 关键词: 用来声明的: “ class, deinit, enum, extension, func, impor ...
- 初探swift语言的学习笔记三(闭包-匿名函数)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29353019 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记十(block)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 转载请注明出处 假设觉得文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)
很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或 block了,而叫闭包(closure).下面配合代码来理解一下swi ...
- 初探swift语言的学习笔记五(线程)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/30354127 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记十一(performSelector)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记(闭包-匿名函数或block块代码)
使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...
- 初探swift语言的学习笔记四-2(对上一节有些遗留进行处理)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/30314359 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
随机推荐
- CentOS6.5下RPM方式安装mysql5.6.33
1.mysql下载 下载地址:https://dev.mysql.com/downloads/mysql/5.6.html下载以下安装包: MySQL-client-5.6.33-1.el6.x86_ ...
- 基于git的工作流程
本文针对的是追求极致.快速的产品响应团队的.以下的观点和内容都是围绕这个主题,暂时不涉及个人学习和团队学习. 在说工作流程之间,想说一下我们平常工作中遇到的一些困惑或者说现象 在一个团队里,同时有好多 ...
- INFORMATICA 的调优之一 源数据的优化
5W1H法来实现源数据的优化 做数据仓库项目的朋友都能感到数据质量和数据抽取展现的性能是整个数据仓库项目的重点.下面谈谈我在DW项目中处理源数据质量问题的5W1H方法. 5W : WHO ,WHAT, ...
- Java + eclipse + awt 编写锻炼打字小软件(未完成)
进入前界面: import java.awt.*; public class Welcome extends JFrame implements Runnable{ Thread t; private ...
- Lua环境
1.前言 Lua将其所有的全局变量保存在一个常规的table中,这个table称为“环境”.这种组织结构的优点在于,其一,不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现:另一个优点 ...
- LAMP编译参数查看
Linux下查看Nginx.Napache.MySQL.PHP的编译参数的命令如下: 1.nginx编译参数:#/usr/local/nginx/sbin/nginx -V2.apache编译参数:# ...
- [转]Oracle分页之二:自定义web分页控件的封装
本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018326.html 上节中,讲述的就是Oracle存储过程分页的使用方式,但是如 ...
- Programming ActionScript 3.0 for Flash
http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7ec ...
- java四舍五入的取舍
一.保留2位小数,且四舍五入 String re = new java.text.DecimalFormat("#.##").format(3.14555); 结果:3.15 二. ...
- 首个攻击该Mac OS系统的恶意软件——KeRanger
首个攻击该Mac OS系统的恶意软件——KeRanger 曾几何时,苹果操作系统一度被人认为是最安全的操作系统.然而近几年,针对苹果系统的攻击日益增多,影响范围也越来越大.无独有偶,近日,苹果Mac ...