//
// main.swift
// Swift-1
//
// Created by 广 on 16/12/12.
// Copyright © 2016年 . All rights reserved.
//
//swift 在写法上比较像脚本语言, (js),但是他是一门编译型语言
//包含的头文件
import Foundation
//输出语句
print("Hello, World!")
/*
//1.常量和变量
常量:一个不可再次更改的对象
变量:可以再次更改的对象
*/
//2.声明常量和变量
//常量的声明: let
let a=1; //可加可不加分号
//变量的声明: var
var b=1
b = 10
//3.类型的标注
//整型
var c : Int = 3
//双精度
var d : Double = 9.888
//字符类型
var e : Character = "a"
//字符串类型
var f : String = "abcdef"
//以下 默认是字符串
var g = "r"
//不管是字符还是字符串 全部使用双引号
//4.常量和变量的命名
//不能以数字开头,不能使用特殊符号,不能使用关键字
let 中国 = 5
let 🐱 = 7
let eee = 2
//5.输出常量和变量
print(🐱,中国, eee)
print("中国是:\(中国),🐱是:\(🐱)")
//6.注释
//和 OC 一样 单行注释// 多行注释/**/
//7.分号
//swift 中,当一行上只有一条代码时,分号写或不写都可以
//当一行上有多条代码是,分号必须写
var i = 4; var h = 9
//8.整数及浮点数
let ia : Int64 = 10
let ib : Float32 = 6.78
let ic : Double = 9.234211
//9.类型安全及类型推断
//swift 中会自动判断数据类型 , 不会将一个错误的类型传给我们使用
var l = 3 //默认整型
var pi = 3.14159267 //默认Double
var q = "s" //默认字符串
let ss = Double(l)*3.15
//10.数据类型转换
//整数与浮点数转换
var w = Double(l) //将类型写在前面 将想要转换的对象用小括号括起来
let sa = w*3.14
var sb = Int(pi)
//字符串与整数转换:要求做到有意义的转换
print("-----------------")
let str1 = Int("10") //有意义
print(str1)
let str2 = Int("asdf") //无意义
print(str2)
//11.类型别名
typealias char = Character
var ch :Character = "s"
var ch1 : char = "s"
//12.布尔值 Bool C 中 bool OC 中 BOOL
var bool : Bool = false
var bool1 : Bool = true
//13.元组
//将多个元素组合到一起称为元祖 元组里面的数据类型可以不同(元组里的元素个数最好不要大于7)
//方式一:声明一个元组
let yuanzu = (404,"NotFound",3.242)
//获取元组的元素
print(yuanzu)
print(yuanzu.0)
print(yuanzu.2)
//方式二:
let (int,string) = (23,"hello")
print(int)
print(string)
//14.可选类型
//在声明时将?号放到类型的后面 将对象设置为可选类型:如果可选类型赋予初始值,对象使用初始值;如果没有赋予初始值,则系统会默认为 nil
var optional : Int? //不加?下等于nil是报错的 var k : Int=nil
var optional1 : Int? = 1000
print(optional)
print(optional1)
//15.nil : 当一个可选类型我们没有赋予初始值时,系统默认这个对象为 nil
//16.强制解析 : 将一个可选类型的对象变为一般类型对象,以供我们使用
// 将取值时,将!放到对象的后面
print(optional1!)
//17、可选绑定 :判断 当可选类型有值时,条件成立 如果可选类型为nil,条件不成立
//let 一个名称 = 之前的某一个对象(可选类型)
if let x=optional{
print(x)
}else{
print("空")
}
//后期做数据解析的时候常用到
//18、隐式解析可选类型
//将一个可选类型的对象变为一个可以进行自动解析的可选类型 : 其实就是将!声明时放到类型的后面,而不是在取值时放到对象的后面
var int12 : Int! = 77; //必须给初始值 必须是 int 型
print(int12)
//加?说明有可能出现 nil
//加!肯定不会出现 nil 的情况
//19、使用断言进行调试 assert
//当条件成立代码继续向下执行 不影响整体的工程
//当条件不成立运行时会崩溃到这里
//意义:断言只是做辅助调试使用 没有实际意义
var int20 : Int = 29
assert(int20 < 100)
print("sdfasdf")
var int22 : Int = 29
//assert(int20 > 100) //当这个条件不成立时,程序不会继续向下执行
//print("sdfasdf")
//////////////////////////////20、基本运算符//////////////////////
//1.赋值运算符 =
//2.算术运算符 + - * / %
//swift中取于运算可以对小数取余的
let yushu = 5.5%2.5
print(yushu)
//3.组合赋值运算符 += -+ /= *=
//swift 中把++ -- 去除了
var ii = 1
ii+=1
//4.比较运算符 < > <= >= == !=
//5.三目运算符 条件?答案1?答案2
//6.空合运算符 可选对象一 ?? 可选对象二
//当可选对象1为 nil 时,选择可选对象二使用,如果可选对象1为有值时,使用可选对象一
var kong1 : Int? = 200
var kong2 : Int? = 300
var kong3 = kong1 ?? kong2
print(kong3)
//7.区间运算符 ...
//1...5 //1,2,3,4,5
//8.半开区间运算符 ..<
//1..<5 //1,2,3,4
//9.逻辑运算符 && || !
/////////////////////////21、字符串///////////////////////////
//1.字符串字面量
let str3 = "string"
//2.字符串初始化空字符串
//2中方式声明空字符串
let str4 : String = ""
let str4_1 :String = String()
//3.判断是否字符串为空
print(str3.isEmpty)
print(str4.isEmpty)
//4.字符串的可变性
let str5 = "aaa" //不可变
var str5_1 = "bbb" //可变
//5.字符串的拼接
//str5 += "1" 不可变的+不可拼接
str5_1 += "tr"
print(str5_1)
var str6 = "uu"
var str6_1 = "ii"
var str6_2 = str5 + str5_1
print(str6_2)
//6.字符串中字符遍历
var str7 = "chaindegirlisbeautgful"
for c1 in str7.characters{
print(c1)
}
//7.字符数据类型
var chh1: Character = "g"
//8.字符串插值
let str8 = "11111\(str7)000000"
print(str8)
//9.计算字符数量
print(str7.characters.count)
//10.字符串索引
var str9 = "string"
//获取第一个索引
print(str9.startIndex)
//获取最后一个字符 会多一个字符 \n
print(str9.endIndex)
//获取第二个索引
print(str9.startIndex.successor())
//获取后数第二个索引
print(str9.endIndex.predecessor())
//获取任意一个索引
print(str9.startIndex.advancedBy(3))
print(str9.endIndex.advancedBy(-4))
//获取 s
print(str9[str9.startIndex])
//获取 i
print(str9[str9.startIndex.advancedBy(3)])
//11.indices使用 index
//将字符所有的下标获取到
for i in str9.characters.indices{
print(i)
print(str9[i])
}
//12.字符串插入
str9.insert("0", atIndex: str9.startIndex.advancedBy(3))
print(str9)
//13.字符串删除
//单个符号的删除
str9.removeAtIndex(str9.startIndex.advancedBy(4))
print(str9)
//多个符号(某个范围)的删除
let range = str9.endIndex.advancedBy(-3)..<str9.endIndex
str9.removeRange(range)
print(str9)
//14.字符串比较
let a10 = "abc"
let a11 = "ab"
//比较字符串是否相等 == < >
if a10 > a11{
print("相等")
}else{
print("不相等")
}
//15.前缀后缀
//前缀
print(a10.hasPrefix("ac"))
//后缀
print(a10.hasSuffix("bc"))
是不是很无聊 淡定 刚开始。。。。。。