swift学习笔记
swift学习笔记
title:  Swift学习笔记
date: 2020-04-29
categories: swift
tags: swift学习
Swift学习笔记
一. swift介绍
swift语言已经出来有一年多了,去年对于基础只是草草的学了些,现在正好沉下心来,深入学习这门语言。
对于这门语言的详细介绍,我就不多说了,推荐大家看这里:
swift github学习区
二. 基础语法
- 基本类型、声明语法
 
1.变量
obj-c:
     Type *typeInstance;<br/>
    NSString *str =  “”;<br/>
     NSString *str2 = [NSString stringWithFormat: “aaaa% “, “bbb”];
swift:
    var a;//(直接这样声明变量是不允许的,必须要给一个初始值,以便来确定他的类型)
<!--more-->
var str = "Hello, playground"
/** 
* var声明与let声明变量的区别:
* 1,var声明值可变的变量,let则声明不可变的常量用的居多
*
**/
var myVarible = 42
myVarible = 50;
let myConstant = 42;
//注释打开则会编译出错
//myConstant = 50
swift 的变量类型可以在声明初始值中直接通过初始值类型来确定
Type Annotations 
如果想声明一个变量或者常量,但又暂时没有赋予初始值(分配内存空间),则用这种方式:
eg:
var welcomeMessage:String
var typeName:Type
变量声明可以用任何的字符来进行声明:
let π = 3.14159
let 你好 = "你好世界"
let 🐶🐮 = "dogcow”
2.常量
//obj-c:
const  int a=10;
//swift:
let a= 10;
3.String 
String类型就比obj-c方便太多了,终于不用每次拼装字符串那么麻烦了
obj-c对一个字符做拼接:
NSString *priceStr = [NSString stringWithFormat: “价格:%ld 元”,250];
swift:
var greeting = "good bye !";
var userName = "sam.hu";
let youSays = "say:\(greeting),my name is \(userName)";
//obj-c的例子可以这样写
var price = 250;
var priceStr = "价格:\(price) 元";
swfit 的String是架在foundation 的NSString类的上的
故如果在在使用foundation的NSString中使用swift的string类是可以的
比obj-c自定义String更方便
字符串字面量的特殊字符 (Special Characters in String Literals)
4. 字符串字面量可以包含以下特殊字符:
转义字符\0(空字符)、\(反斜线)、\t(水平制表符)、\n(换行符)、\r(回车符)、"(双引号)、'(单引号)。
Unicode 标量,写成\u{n}(u为小写),其中n为任意一到八位十六进制数且可用的 Unicode 位码。  
下面的代码为各种特殊字符的使用示例。
 wiseWords常量包含了两个双引号。
dollarSign、blackHeart和sparklingHeart常量演示了三种不同格式的 Unicode 标量:
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imageination is more important than knowledge" - Enistein
let dollarSign = "\u{24}"             // $, Unicode 标量 U+0024
let blackHeart = "\u{2665}"           // ♥, Unicode 标量 U+2665
let sparklingHeart = "\u{1F496}"      // 💖, Unicode 标量 U+1F496
- String可以将字符进行迭代:
 
 for character in "Dog!🐶".characters {
            print(character)
        }
        
5. 集合类
- Array
 
初始化:
obj-c:
    NSArray *array1 =  [ "aa", "bb", "cc"];
    NSArray *array2 = [NSArray arrayWithObjects: "第一栏", "第二栏", "第三栏", nil];
    NSArray *array3 = [NSArray alloc] init];//NSArray 是不可变数组,故需要初始化时分配空间大小,这样实例化一个array一般是没有意义的
    
    NSMutableArray *array4 = [[NSMutableArray alloc] init];
    [array4 addObject: "sss"];
swift:
var shoppingList: [String] = ["Eggs", "Milk"] //Swift 2.1 官方教程上是var shoppingList:String[] 这种声明,发现在编译器里是错误的
或者
var shoppingList = ["Eggs", "Milk"]
//在swift中没有可变和不可变数组的概念
//        shoppingList += "Baking Powder" //这种方法添加数组是不行的
        shoppingList += ["Baking Powder"]
        //你还可以以数组的方式添加item
        shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
        //把第5、6个元素内容分别替换成Bananas、Apples,第7个元素被切掉了
        shoppingList[4...6] = ["Bananas", "Apples"]
        //将会返回["Eggs", "Milk", "Flour", "Baking Powder", "Bananas", "Apples"]
        
  //遍历,for in
  for item in shoppingList{
            print(item);
  }
  
  //如果需要下标值 for enumerate
  for (index,value) in shoppingList.enumerate(){
            print("index:\(index) value:\(value)")
        }
        
   let apples = shoppingList.removeLast()
        print(apples)
        //oc的数组里的元素类型必须一样,而swift可以不同,用let初始化一个数组
let arrays = ["cars",20,true]
        print(arrays)    
6,函数的定义
obj-c:
-(NSString *)testFunction:(NSString*)name with:(Integer)room{
}
swift:
func testFunction(p1:int,p2:String)->int
{
  return p1
}
//return fun
//调用:
func(2,”B")
定义的函数还是返回函数
obj-c:
-(int)testA:(NSString *)p1 param2: (int) p2
{
     return 250;
}
5,类的定义
不再分头文件和m文件了
构造函数还是init 
obj-c:
    //TestClass.h
     inteface TestClass:NSObject
    
     end
    
    //TestClass.m
     implementation TestClass
    
     end
swift:
class TestClass: NSObject{
}
  
	
