// ?main.swift
// ?Swift初級(一)
// ?Created by ?on 15/11/2.
// ?Copyright ? 2015年 ?All rights reserved.
//當(dāng)需要導(dǎo)入類庫的時(shí)候,使用import 類庫名,不用再加<>或者""
//
import Foundation
print("Hello, World!")//在swift中,使用print輸出
//1.定義常量(let)和變量(var)
//定義常量
let myGender = "男"http://commond+ctrl+空格可添加表情
//myGender = "女" ?//因?yàn)閙yGender是用let修飾的
//定義變量
var carName = "BMW"
carName = "Audi" ?//因?yàn)閏arName是用var修飾的
//Swift定義變量或者常量的時(shí)候,需要標(biāo)識出變量或者常量的類型,如果不標(biāo)識,會(huì)根據(jù)初始值自動(dòng)的推斷。
let name = "Jack" ?//會(huì)自動(dòng)推斷為String,由后面的值來決定name的類型
//let name:String = "Jack"http://由前面的類型String,決定后面賦什么類型的值.即后面值的類型要和String一致
let age:Int = 3 ?//注意:如果是使用let修飾,必須賦初值;如果是使用var修飾,可以不賦初值
var age1:Int? //'?'表示當(dāng)前age1是可選類型,其值可以為空
print(age1)
//定義一個(gè)字符類型的變量
var char:Character = "A" //此時(shí)char就是一個(gè)字符,切記其值也是用""的,只能放一個(gè)字符
//定義一個(gè)Bool類型的變量(值只有true,flase)
var flag:Bool = true
/***** 字符串String******/
//(1).創(chuàng)建一個(gè)空串變量
var str_empty = ""
var str1_empty = String()
//(2).通過字符串對象的isEmpty方法判斷是否為空
if str_empty.isEmpty{ ?
//if 后面的判斷條件(表達(dá)式,方法..)的返回值,必須是Bool類型的 ? ?
print("str_empty is empty!!")
}
//(3).拼接字符串
var str_url = "http://"var
str = "www.lanou3g.com"
let urlString = str_url+strprint(urlString)
print("藍(lán)鷗官網(wǎng):\\(urlString)\\n")//插入式取值 \\(變量名)
//(4).獲取字符串長度
var str1:String = "abc"
print(str1.characters.count)
//(5).字符串插值
let mul = 4
let content = "\\(mul)*2.5 = \\(Float(mul)*2.5)"
print(content)
//(6).字符串比較
let str2 = "xiaoxiao"
let str3 = "lanou"
if str2 != str3{ ?// == ? ?
print("兩個(gè)字符串不相等!!!")
}
/***********數(shù)組(Array)********/
//Swift的數(shù)組里面存儲的所有數(shù)據(jù) 都必須是同一類型的。如果需要使用不同類型的,可以使用OC的數(shù)組
//定義一個(gè)數(shù)組變量
var nameArray = ["張三","李四","王五"]
var nameArray1:Array= ["張三","李四","王五"
]let array = Array() ?//定義一個(gè)字符串型空數(shù)組
var int_arr = [Int]() //定義一個(gè)整型空數(shù)組
//訪問數(shù)組中某個(gè)元素
print("第二個(gè)元素\\(nameArray[1])")
print(nameArray[0])
//向數(shù)組中添加一個(gè)元素
var int_arr1 = [Int]()int_arr1.append(10)int_arr1.append(20)
// 使用運(yùn)算符重載向數(shù)組中添加一個(gè)元素
int_arr += [1]// 使用運(yùn)算符重載向數(shù)組中添加多個(gè)元素
int_arr += [1, 2, 3]print(int_arr1)//在數(shù)組中的某個(gè)位置,插入一個(gè)元素
int_arr1.insert(30, atIndex: 0)print(int_arr1)//移除數(shù)組中某個(gè)位置上的元素
int_arr1.removeAtIndex(2)print(int_arr1)//移除數(shù)組中所有元素
int_arr1.removeAll()print(int_arr1)
/***********字典(Dictionary)*******/
//定義一個(gè)字典變量var dictionary:Dictionary= ["a":10,"b":20]//定義個(gè)空字典變量var dictionary1:Dictionary= [:]var dictionary2 = Dictionary()
//向字典中添加一個(gè)鍵值對
dictionary["c"] = 30
print(dictionary)
//修改字典中某個(gè)鍵值對的值
dictionary["a"] = 50
print(dictionary["a"])
//刪除字典中的一個(gè)鍵值對
dictionary.removeValueForKey("a")
print(dictionary)
/***************元組*****************/
//定義一個(gè)元組變量
//方法一:直接初始化一個(gè)元組,通過隱式類型推斷確定每一個(gè)元素的類型
let status = ("藍(lán)鷗1班",["iOS","Html5"])
//方法二:顯示的標(biāo)識出元素的類型
let statusNews:(String, Array) = ("藍(lán)鷗1班",["iOS","Html5"])
//取出元祖中的值的方法:
//方法一:直接賦值給常量,并通過使用標(biāo)記名來獲取對應(yīng)的值
let statu:(classroom:String,course:Array) = status
var classInfo = statu.classroom + statu.course[0] + statu.course[1]
print(classInfo)
//方法二:直接通過下標(biāo)獲取元素的值
var classInfos = statu.0 + statu.1[0] + statu.1[1]
print(classInfos)
print(classInfos)
status
/*************循環(huán)********/
//extension
//第一種形式:
for var i = 1; i<10;i++
{
print(i)
}
//第二種形式:
for number in 1..<10{
print(number)
}
//第三種形式:
for number in 1...10{
print(number)
}
//while,repeat...while
var i = 5
while i > 0{
i--
print(i)
}
repeat{ ? ? ? //先執(zhí)行循環(huán)體,再判斷條件
print("repeat...while")
}while 1<0
//使用for循環(huán)遍歷數(shù)組
var animalsArray = ["dog","cat","tiger","pig"]
for a in animalsArray
{
print(a)
}
//使用for循環(huán)遍歷字典
var animalsArray1 = ["dog":"","pig":""]
for (key,value) in animalsArray1{
print("key = \\(key),value = \\(value)")
}
/********分支結(jié)構(gòu)(if...else,switch...case)******/
//if結(jié)構(gòu)
let flag1 = true
if flag1 == true
{
print("flag=\\(flag1)")
}else{
print("flag=\\(flag1)")
}
//switch...case
//特點(diǎn)1: switch中實(shí)現(xiàn)貫穿,使用關(guān)鍵字fallthrough
let value = 0
switch value{
case 0:
print("0")
fallthrough
case 10:
print("10")
fallthrough
default:
print("Other")
}
//特點(diǎn)②: case后面可以是一個(gè)范圍
switch value{
case 0..<10:
print("范圍是在0..<10,不包括10")
case 10...100:
print("范圍是在10...100,包括100")
default :
print("Other")
}
//特點(diǎn)③: case后面可以定義一個(gè)變量(let,var修飾都可以),where后面是定義這個(gè)變量需要滿足的條件
switch value {
case var i where value>=0 && value<10:
i = 20
print(i)
default:
print("Other")
}
//特點(diǎn)4: switch...case可以匹配一個(gè)元組
let point = (10,10)
switch point{
case (_,10): ? ? ? // '_'代表忽略
print("case1") //默認(rèn)帶有break
case (10,0):
print("case2")
case (10,10):
print("case3")
default:
print("Other")
}
/*********枚舉(enum)**********/
//原始類型是Int型的枚舉
enum Direction:Int
{
case east = 0
case south = 1
case north = 2
case west ?= 3
}
print(Direction.east.rawValue) //rawValue打印原始值
//原始類型是String型的枚舉
enum Season:String{
case spring = "春天"
case summer = "夏天"
case winter = "冬天"
}
print(Season.summer.rawValue)
//Direction(rawValue:2)表示:通過原始值2,獲取一個(gè)枚舉成員,這個(gè)成員的類型是Direction
//dir 類型為 Direction? 值為 Direction.north
let dir = Direction(rawValue: 2) //表示取的是原始值為2那個(gè)別名(north)
dir?.rawValue
print(dir)
print(Direction.south.rawValue)
/*********函數(shù)********/
//表示函數(shù)的關(guān)鍵字 func
//函數(shù)的類型分為:四種
//1.無返回值 無參
func function1() -> Void{
print("無返回值,無參")
}
function1()
//2.無返回值 有參
func function2(name str:String) ->Void{
print(str)
}
//function2("藍(lán)鷗")
function2(name: "藍(lán)鷗")
//3.有返回值無參
func function3() -> String{
return "Hello"
}
let string = function3()
print(string)
//4.有返回值有參
func function4(a:Int ,b:Int) ->Int
{
return a+b
}
let result = function4(3, b: 4)
print(result)
//5.函數(shù)的返回值為元組類型(利用元組實(shí)現(xiàn)函數(shù)返回多個(gè)值)
func sumMulMinus(number1:Int,_ number2:Int) ->(Int,Int,Int){
return(number1 + number2,number1 * number2,number1 - number2)
}
//
//sumMulMinus(5, number2: 2)
sumMulMinus(5, 2)
//內(nèi)部參數(shù)和外部參數(shù)
//內(nèi)部參數(shù)名:在函數(shù)內(nèi)部使用的參數(shù)名稱
//外部參數(shù)名:在函數(shù)調(diào)用時(shí)候,顯示的參數(shù)名稱
//默認(rèn)情況下,函數(shù)的第一個(gè)參數(shù),不顯示外部參數(shù)名,其余參數(shù),顯示外部參數(shù)名,并且和內(nèi)部參數(shù)名一致
func ?text(first one: Int,second two: Int){
print(one, two)
}
text(first: 10, second: 10)
//如果不想要顯示外部參數(shù)名,使用“_”忽略掉
func text1(one : Int, _ two : Int) {
print(one, two)
}
text1(10, 20)
// inout參數(shù)
// 參數(shù)默認(rèn)是常量:let
// 在參數(shù)前面添加var修改,就可以修改參數(shù)
// 如果參數(shù)使用inout來修飾,就成了輸入輸出參數(shù),在函數(shù)內(nèi)部修改參數(shù),可以影響外部變量的值
func test8(inout name: String) {
name = "LIZE"
print(name)
}
var myName = "lize"
test8(&myName)
print("myName: " + myName)
// 參數(shù)前面用var修飾,修改參數(shù)
func test9(var name : String) {
name = "LIDAZE"
}
//函數(shù)嵌套
func test1(){
func test2(){
func test3(){
print("test3")
}
test3()
print("test2")
}
test2()
print("test1")
}
test1()