Swift 学习1

前两天刚刚学习了Swift,感觉和OC的差异有点大啊,一开始并不习惯!
在这里记录下swift的学习笔记吧。

//常量和变量
let number = 10
//number = 5 常量不能改变

var name = "sugar"
name = "uzi"  //变量可以修改
print(name)  //在控制台输出  相当于NSLog

let 汽车 = "汽车"
print(汽车)

//强制指定类型
let number1:Int = 20
let floatNumber:Float = 2.0
let doubleNumber:Double = 3.00

let name1 = "sugar"
//类型转换 String()  字符串的拼接+
let str = name1 + String(number1)
print(str)
//打印字符串的长度
print(name1.characters.count)

//Character只是一个单个的字符
let char:Character = "A"

//字符串
var str1:String = "sugar在2班学习"

//空字符串
var empty_str = ""
var empty_str1 = String()

//判断字符串是否为空
if(str1.isEmpty){
    print("是一个空的字符串")
}
else{
    print("是一个有值的字符串")
}

//字符串拼接
var animalStr = "dog"
animalStr += "cat"
print(animalStr)

//字符串插值
var num = 3.0
print("2.5 * \(num) == \(num*2.5)")

//判断字符串相等
let sex = "男"
let sex1 = "女"
if sex == sex1{
    print("一样")
}
else{
    print("不一样")
}

var string1 = "smile"
var string2 = "cry"
var temp:String
temp = string1
string1 = string2
string2 = temp
print(string1)
print(string2)

以上是一些简单定义字符串、整型数据的方法。
在swift中,let用来定义常量,常量不可变,就是我们用let定义的东西不能再次对它进行修改操作;var用来定义变量,顾名思义,就是可以改变的。
这点和OC有很大区别啊,OC中定义可变字符串和不可变字符串如下:

NSMutableString *mulStr = [[NSMutableString alloc] initWithString:@"sdhjdsf"];//可变字符串创建方法(当然,只是其中一种)
        NSLog(@"%@", mulStr);

        NSString *str = @"sdjfdfs";//(不可变字符串,字面量方法创建)
        NSLog(@"%@", str);

swift中的就很简洁的:

var mulStr:String = "shjdfh" //可变字符串
var mulStr1 = "dhjfhdfj" //这样创建的话,系统会帮我们识别是什么类型,就是系统会识别是字符串还是其他什么类型
let str2:String = "dsfjsjkldfg" //不可变字符串

还有字符串的拼接啊什么的,swift都会比OC要简单许多。除了字符串,像数组,字典,在swift里的定义方法都差不多。

var mulArr:Array = ["djdf", "ddff", "dwfegh"]  //可变数组
let arr1:Array = ["dasdf", "dfdasf", "hrhh"]   //不可变数组

//元素的类型必须是一样的

//元素类型为String的数组
let nameArray = ["sugar","张三","李四"]

//Array<String> Array 是类型  <String>数组中元素的类型
var name_array:Array<String> = ["kkk","张三"]

//元素类型为string的空可变数组
var empty_array = Array<String>()
var empty_int_array = [Int]()

//追加
name_array.append("王五")
print(name_array)

//往对应的位置添加一个元素
name_array.insert("zj", atIndex: 1)
print(name_array)

//"+="也是往数组后面追加元素 可以追加多个
name_array += ["lyl", "sh"]
print(name_array)

//修改
name_array[0] = "jianb"
print(name_array)

//删除
name_array.removeAtIndex(0)
print(name_array)

还有下面的字典

let dict = ["name":"sss", "age":15] //不可变字典
var dict1 = ["name":"sss", "age":15] //可变字典

//不给类型
var studentDic = ["name":"sss", "age":12, "sex":"男"]
print(studentDic)

//给类型 要对应 key 跟 value 的类型
var animalDic:Dictionary<String,Int> = ["dog":10, "cat":20]
print(animalDic)

//空字典
var empty_Dic = [:]
var empty_dic = Dictionary<String,Int>()

//增加
animalDic["fish"] = 30
print(animalDic)

//修改
animalDic["dog"] = 100
print(animalDic)

//删除
animalDic.removeAtIndex(animalDic.indexForKey("cat")!)
animalDic.removeValueForKey("dog")
print(animalDic)

swift中多了一个元组,有点类似于字典和数组的结合版

//元组中有两个元素  一个是String类型的  一个是Array类型的
let classInfo:(String,Array) = ("2班", ["ios", "H5"])

//给元组中元素一个名字
let classInfo1:(classname:String, course:Array) = ("2班", ["ios", "H5"])

//元素的名字去拿元素
print(classInfo1.classname)
print(classInfo1.course[0])

//元素的角标
print(classInfo.1[0], classInfo.0)

//练习
var dict = ["name":"sugar", "age":22, "sex":"男", "num":26]
var arr = [dict]
var arra = (dict, arr)
print(arra.1[0]["age"]!)

循环结构

//第一种方法
for var i = 0;i<100;i++ {
    print(i)
}

//第二种方法  "..<"就是<10
for num1 in 0..<10 {
    print(num1)
}

//这种  "..."就是<=10
for i in 0...10 {
    print(i)
}

//for in 遍历数组/字典
var carArr = ["Audi", "Benz", "Posche", "BMW"]
for car in carArr{
    print("carName___\(car)")
}

var NBADict = ["James":"骑士", "Paul":"快船", "Wede":"热火", "Kobe":"湖人"]
for (key,value) in NBADict{
    print(key, value)
}

var num2 = 5
//如果大于0 就一直做循环
while num2 > 0{
    num2--
    print(num2)
}

//如果 while后边判断条件为真 会一直执行repeat里边的内容
//如果 while后边的判断条件为假  只会执行一次
repeat {
    print("repeat")
}while 10<9

//判断语句
var numberValue = 10
if numberValue == 10 {
    print("等于10")
}
else{
    print("不是10")
}

//switch
//不需要添加 break 系统会自动帮我们添加
//fallthrough 贯穿 执行完判断之后 不会跳出 会继续往下执行
//每个分支必须包含代码
let numValue = 10

//第一种
switch numValue{
case 10:
    print("值为10")
    fallthrough
case 20:
    print("值为20")
default:
    print("Other")
}

//第二种
//也可以在这里写判断条件
switch numValue {
case 0...20:
    print("小孩子")
case 20..<30:
    print("小青年")
default:
    print("Other")
}

//第三种 可以在switch中声明变量
switch numValue{
    //在case 里我们可以声明一个变量 如果满足条件的话 我们就可以使用它 并且其值跟switch条件的值一样
case var num where numValue > 0 && numValue < 20:
    num++
    print(num)
default:
    print("Other")
}

//第四种 在switch中 可以判断元组
let point = (x:10,y:10)
//"_" 忽略  在这里忽略掉第一个元素
switch point{
case (10,10):
    print("10,10")
    fallthrough
case (_,10):
    print("_,10")
case (10,_):
    print("10,_")
default:
    print("Other")
}

枚举

//可以给枚举赋原始值 也可以不赋原始值 对应int来说是递增的
enum Direction:Int{
    case East = 0
    case South
    case West
    case North
}
let d1 = Direction.West
print(d1.rawValue) //取出原始值

//原始值是String类型
enum Season:String{
    case Spring = "春天"
    case Summer = "夏天"
    case Autumn = "秋天"
    case Winter = "冬天"
}
print(Season.Autumn.rawValue)

//通过原始值创建变量
enum Person:Int{
    case 小明 = 1
    case 八戒
    case 大圣
}

let p1 = Person(rawValue: 1)
print(p1!)

函数

//无参无返回值
func sayHello() ->Void{
    print("sayHello")
}
sayHello()

//无参有返回值
func sayHi() ->String{
    return "sayHi"
}
//用常量接收返回值
let hiStr = sayHi()
print(hiStr)

//有参数无返回值
//()里面参数名 和 参数类型
//n1 n2叫做外部参数  作用就是调用的时候给我们看的(并没有什么卵用)
//num1 num2 叫做内部参数 是实际传进去的参数
func sum(n1 num1:Int, n2 num2:Int) ->Void{
    print("\(num1+num2)")
}

/*
//如果我们不写外部参数 系统默认不显示第一个外部参数  其他都显示
//sum(5, n2: 3)
*/

//如果我们都不想让显示 我们可以加上"_"忽略外部参数

sum(n1: 5, n2: 3)
//总结:1.都显示就全都写上外部参数  2.都不显示就写上"_" 忽略掉  3.系统默认  第一个不显示,后面全显示外部参数

//有参有返回值
func baiduStrMethod(str3:String, str2:String) ->String{
    return str3 + str2
}
print(baiduStrMethod("http://", str2: "www.baidu.com"))

//有参数有多个返回值
func caculate (num11:Int, num22:Int) ->(Int, Int, Int){
    return (num11+num22, num11-num22, num11*num22)
}
print(caculate(10, num22: 5))

//函数嵌套
func test1(){
    print("test1")
    func test2() {
        print("test2")
    }
    test2()
}
test1()

//inout
func inoutTest(inout name:String) ->Void{
    name = "sugar"
}
//定义一个变量
var myname = "kkk"
inoutTest(&myname)

//打印外边的myname
print(myname)

个人总结:感觉swift是很简便,但好像与Xcode的兼容性并不太好,有时候用swift写着写着就会报错,代码颜色全变白/黑,有时候还会直接崩溃。

行啦,第一天就学了这些Swift,可能是有OC的基础,感觉并不难理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值