swift学习(一)

2016-07-17  本文已影响59人  内心强大的Jim

1.var与let

//用关键字 var 声明字符串变量 str 类型是通过右值推断出来的(类型推断)

var str = "Hello, playground"

//声明一个变量 view 类型推断为 UIView类型

var view = UIView()

view.addSubview(UIView())

for var i = 0; i<10; i++ {

}

var a = 10

var b = 20

var c = a + b

//输出

print(c)

//变量 用var声明

var variable = 10

variable = 20

//常量 用let声明

let const = 10 //const 是常量 10 是字面值

//const = 20 //常量不可修改

//字面值

//整数的字面值

var x = 10

x = 0000000015//整数的字面值会忽略前面任意多个0

x = -15

x = 1_000_000_000//这里的下划线没有实际意义,只是增加代码的可读性

//八进制

x = 0o15

//十六进制

x = 0xff

//二进制

x = 0b110010

//浮点数

var y = 3.14

y = 1.25E-2//科学计数法  1.25*10^-2


2.基本类型

//var str = UIImage()

//int a

//var a : Int

//声明变量标准写法

var welcomeMessage2 : String = "welcomeMessage"

//类型标注  声明字符串变量

let welcomeMessage : String

//初始化

welcomeMessage = "Welcome to swift"

//welcomeMessage = 10 //类型不配备

//welcomeMessage = "wts" //常量不可以修改

/********类型推断  *****/

var x = 10 //推断为整型

var msg = "OK" //推断为一个字符串

var a = 0.0, b = 2.2, c = 2, d = "abc"

//a b 推断为浮点类型 c 推断为整型 d 推断为字符串类型

var i1 = 5

var d1 : Double

//这里的类型检查非常严格,int和double之间都不能自动转换,如果要转换必须强制转换

d1 = Double(i1)

//i1 = i1 + 3.14

d1 = d1 + 3.14

//字符串拼接

var label = "This is"

var label2 = "label"

var text = label + label2

var width = 94

text = text + " width is " + String(width)

print(text)

let apples = 3

let oranges = 5

let appleSummary = "我有\(apples)个苹果和\(oranges)个橘子"

let show : String = "\(apples)"

print(appleSummary)

//swift 中的数据类型

var i : Int

Int.max

Int.min

var ui: UInt

UInt.max

UInt.min

var i8 : Int8

Int8.max

Int8.min

var ui8 : UInt8

UInt8.max

UInt8.min

var i16 : UInt16

var i32 : UInt32

var i64 : UInt64

UInt64.max

//浮点

var f1 : Float

var f2 : Double

var f3 : Float32

var f4 : Float64

//Float32 是 Float的别名

//typealias Float32 = Float

//c中起别名的方式

//typedef Float32 MyFloat

//swift 中起别名的方式

typealias MyFloat = Float32

var f : MyFloat = 3.24

//布尔

var isBool : Bool //取值 只有true和false

isBool = true

isBool = false

var x2 = 100

isBool = (x2 == 100)


3.值类型和引用类型

//声明字符串 并 初始化var str = "abc"

print(str)

//声明字符串 没有初始化

var str2 : String//print(str2) //没有初始化的变量不可以使用

str2 = ""

print(str2)

//声明字符串变量 并创建出来(默认初始值是空字符串)

var str3 = String()

print(str3)if str3.isEmpty {  

  print("这个字符串是空的")

}

let constString = "常量"

//constString = "修改"

var variable = "变量"

variable = "修改"

//值类型 和 引用类型//swift中的字符串是值类型(所有基本数据类型都是值类型//swift中所有基本类型数据类型全部是结构体//)

var string1 = "Hello"

var string2 = string1

string1 = "OK"

string2

//结构体是值类型

struct MyStruct {

var a = 10

var view = UIView()

func test() {

print("test")

}

}

var ms = MyStruct()

var ms2 = ms //赋值内容

ms2.a

ms.a = 20

ms2.a

//类 是引用类型

class MyClass {

var a = 10

var view = UIView()

func test() {

print("test")

}

}

var mc = MyClass()

var mc2 = mc //赋值内容

mc2.a

mc.a = 20

mc2.a

//OC中的字符串是引用类型(OC中的所有的类都是引用类型)

var nsString1 : NSMutableString = "Hello"

var nsString2 = nsString1

//通过引用改变 内容

nsString1.appendString("abc")

nsString2

//改变 nsString1 的引用的地址

nsString1 = "aaaaaaa"

nsString2

////C中参数值传递 和参数地址传递

//void add(int a) {//值传递

//a += 20

//    //a = 120

//}

//

//void add1(int *a) {//地址传递

//*a += 20

//}

//int x = 100

//

//add(x) //值传递

//x = 100

//add1(&x)  //地址传递

//x = 120

//字符

var char : Character = "A"

char = "中"

char = "😀"

var s = "ad😀fgfhfj\(100)hhfhftygyh"

var 中国 = "china"

var 🐶 = "dog"

var s2 = "日本" + 🐶

var str10 = "Hello"

var str20 = "there"

let rest = str10 + str20

var ch : Character = "!"

let newStr = rest + String(ch)

let newStr2 = rest + "\(ch)"

//OC中数组 字典 集合中放入的元素只能是NSObject类型的元素

//UIView *view = [[UIView alloc] init];//1

//NSMutableArray *array = [NSMutableArray array];

//[array addObject:view]  //view + 1      2

//[view release]  //-1

//c 中 字符是字符数组,swift中一样

var catCharacters : [Character] = ["C", "a", "t", "!"]

catCharacters[0] = "A"

//通过字符数组创建字符串

var catString : String = String(catCharacters)

//遍历 字符串

for char in catString.characters {

print(char)

}

if catString.hasPrefix("A") {

print("字符串是以A开头的")

}

if catString.hasSuffix("!") {

print("字符串是以!结尾的")

}

let wiseWords = "\"想象力比知识更重要\" ----爱因斯坦"

print(wiseWords)

//String 和 NSString 的转换

var nsString_1 : NSString = "NSString"

//NSString 转换为 String 需要 as

var string_1 : String = nsString_1 as String

as String

//String 转换为 NSString 直接自动转

var nsString_2 : NSString = string_1

/************** 复习原来的知识 *******************/

//创建一个空数组

var objects : [NSObject] = []

var nsNum = NSNumber(int: 100)

var nsString = NSMutableString(string: "abc")

nsString.substringToIndex(1)

objects.insert(nsNum, atIndex: 0)

objects.insert(nsString, atIndex: 1)

objects.count

var obj : NSObject = objects[1]

//将 NSObject 类型 转换为 NSMutableString类型

var strObj = obj as! NSMutableString

strObj.substringToIndex(1)


4.运算符

var a, b, c, d, e, f : Int

a = 10

b = 20

//swift中不可以这样使用,因为swift中的赋值运算符函数没有返回值

//a = b = c = d = e = f = 50

1 + 2

5 - 3

2 * 3

10 / 3

10.0 / 3

10.3 / 1.2

9 % 4

-9 % 4

9 % -4

-9 / -4

//swift中可以对浮点数取余

10.3 % 1.2

a = 10

//单目

a++

++a

a = 10

b = a++ + ++a + ++a + a++

a--

--a

//比较运算符

a == b

a != b

a > b

a < b

//三目运算符

a > b ? a : b

//? 声明可选值 swift中只有可选值可以为nil 可选值默认使用nil初始化

var x : Int?

x = nil

let r = x != nil ? x : 0

r

//空合运算符

let r2 = x ?? 0 //如果x不是nil 返回x 否则返回 0, 和上面的三目 意义一样

r2

//区间运算符

a = 5

b = 10

//全开

a...b

5...10

for index in 1...5 { 

 print(index)

}

for index in a..<b {

print(index)

}

//如果不需要 index 可以用 _ 把位置占上

for _ in 1...5 {

print("重复打印这句话")

}

//逻辑运算符

a = 10

b = 20

c = 30

a < b && b < c

a > b || b > c

!(a < b)

//if

//如果一行中有多个语句,使用;分割

a = 30; b = 50

if a > b {

print("a 大")

} else if a < b {

print("b 大")

} else {

print("一样大")

}


5.分支

/**

*  switch

1.完备性,不管有多少种可能一定要有分支进入

2.没有隐式贯串,不用加break,也不会继续执行下面的case

3.如果需要继续向下贯串,只能使用fallthrough 来向下贯串

*/

let x = 99

switch x {

case 1:

print("x == 1")

case 2, 3, 4, 5:

if x == 5 {

break

}

print("x 是 2 -- 5")

fallthrough //显示贯串

case 6...100:

print("x是6---100")

default:

print("x = 不在范围内")

}

let vegetable = "青辣椒"

switch vegetable {

case "芹菜":

print("这个菜 是芹菜")

case "黄瓜", "豆芽菜":

print("这个菜 是黄瓜 或 豆芽菜")

//用x把vegetable接收过来,并且判断是否是以辣椒结尾的,如果是进入case

case let x where x.hasSuffix("辣椒"):

print("这个菜 是那种狠辣狠辣的 \(x)")

default:

print("这个是草")

}


6.循环

for index in 1...10 {

print("index 的值是\(index)")

}

for index in 1..<10 {

// index = 100 //默认是常量

print("index 的值是\(index)")

}

for ch in "abcdef".characters {

print("ch 的值是\(ch)")

}

for var i = 0; i < 10; i++ {

print("i = \(i)")

}

var j : Int

for j = 0; j < 10; j++ {

print("j = \(j)")

}

var a = 0

while a <= 10 {

print(a)

a++

}

a = 0

//相当于 原来的 do while

repeat {

print(a)

a++

}while a <= 10


7.break和continue

for var i = 0; i < 10; i++ {

if i == 5 {

    break

   }

    print(i)

}

for var i = 0; i < 10; i++ {

if i == 5 {

   continue

   }

  print(i)

}

print("----------------")

var a = 0

//带标的语句

loop : while a < 10 {

   a++;

switch a {

    case 5:

        break loop

    case let b where a > 1 && a < 4:

       continue

    default:

        print(a)

   }

}

print("-----------------")

loop : for var i = 0; i < 3; i++ {

   print("=============")

    for var j = 0; j < 3; j++ {

if j == 1 {

     continue loop

    }

    print(j)

   }

 }

上一篇下一篇

猜你喜欢

热点阅读