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{
}