swift语法基础<一>

声明变量和常量

//1.基本数据类型:Int 整形,Double 和Float表示浮点型,Bool布尔值,String文本型数据,Array 数组,Dictionary 字典
//2.常量 let ,变量var
let con = 100
var avi = 30
avi = 40
//3.一行中声明多个常量或者变量,用逗号隔开
var a = 3, b = 4, c = 5
//4.类型标注:如果声明的同时附了初始值,并不需要类型标注
var who: String
who = "xiaoming"
print(who)

swift的基本语法

类型转换

//类型转换
let a: UInt8 = 10
let b: UInt16 = 110
print("\(UInt16(a) + b)")

//整形转变成浮点型
let sa = 3
let pi = 3.1415
let add = Double(sa) + pi
print(add)

元组

//元组的补充:可以把任意的类型组合成元组,元组可以看成是一个复合的值
let people = (18, "xiaoming")
//可以把元组的内容单独的分成常量和变量
let (age, name) = people
print(age)
print(name)

//如果我们只是需要一部分元组值,则可以把要忽视的部分用下划线进行标记
let (age1, _) = people
print(age1)

//通过下标也可以访问元组中的元素
print(people.0)

//定义元组的时候也可以根据单个元素命名,通过名字获取元素的值
let rec = (w: 10, h: 20)
print(rec.w)

可选类型

//可选类型:处理值可能缺失的情况,可以表示任意类型的值缺失的情况
let str : String? = "12345"

//用if语句表示是否是可选类型
if str != nil {
    print(str!)//只有加上!才能获取可选类型的值,表示对可选类型的强制解析
}

//判断可选类型是否包含值的方式称为可选绑定,在它的语法中可以声明常量接受,也可以声明变量接受
/*
 可选绑定可以用if和while语句中来对可选类型的值进行判断,并赋值给常量或者是变量
 注意点:在swift中nil表示的是一个确切的值,而在oc中他表示一个指向不存在对象的指针
 */
if let str1 = str {
    print(str1)
}
var  servercode : Int? = 404
servercode = nil //现在servercode 不包含值
var sunny : String?

//隐式解析可选类型:当确定一个变量的值已定不为nil时,就可以把它设置成隐式解析可选类型
//第一次被赋值之后,可以确定变量的值不为nil
var possiblestr: String! = "swift"
print(possiblestr)//可以不通过!来获取变量的值

断言

//在值缺失,或者值并不满足特定的条件,代码就不会继续执行,此时需要触发一个断言结束代码的运行,通过调试找到值缺失的原因
let age2 = -10
assert(age2>=0, "年龄要大于0")//assert就表示一个断言,只有保证条件为真时,才能保证代码可以继续运行

运算符

//2.溢出运算符:在运算符的前面加上&符号 &+,&-, &*
var c = UInt8.min
c = c &- 1
print(c)

//swift可以对浮点数求余,而在oc中是不可以的
var rem = 10 / 2.3
print(rem)

//空合并运算符(a ?? b 对a的条件进行判断,a不为nil执行a的语句,否则执行b的语句)
/*
 表达式a必须是可选类型
 默认值b的类型必须要和a存储值的类型保持一致
 */
let words = "hello"
var say: String?
var content = say ?? words
print(content)

//闭区间运算符a...b 半开区间运算符a..<b , 注意中间没有空格
for i in 1...5 {
    print(i)
}

字符串

//字符串
var str1 = "swift"
var str2 = String()//初始化字符串的实例
var str3 = str1 + "学习"//字符串的拼接可以使用+号
print(str3)
str1 += "你好"//+=将字符串拼接到自身
print(str1)

let char : Character = "!"
str1.append(char)
print(str1)//append拼接字符
print("str3 has \(str3) chars")

let quotation = "same"
let samequ = "same"
if quotation == samequ {//判断字符串是否相同
    print("same")
}

var food = ["fruits:apple",
            "fruits:orange",
            "fruits:banana",
            "vegetable:tomato",
            "vegetable:potato"]
for fru in food {
    if fru.hasPrefix("fruits"){//hasPrefix查找特定的前缀
      print(fru)
    }
    if fru.hasSuffix("apple"){//hasSuffix判断是否拥有特定的后缀
        print(fru)
    }
}

数组

//数组的声明可以是显性声明,也可以推断出数组的类型。数据放在数组之前,它的类型必须明确。
food.append("vegetable:aaaa")//通过append添加新的数据项
food[0...2] = ["ss", "nn"]//可以通过下标值替换数组中的元素。若替换的下标有3个,而右边只有2个值,则swift会自动赋值为nil
print(food)

food.insert("meat", at: 0)//通过insert插入元素
food.remove(at: 0)//通过remove方法可以移除数组中的元素
food.removeLast()//移除最后一项的元素

//使用构造语法来创建一个由特定类型构成的空数组
var someint = [Int]()
print("someints is of type [int] with\(someint.count)items")

//可以创建特定大小并且所有数据都被默认的构造方法 如:浮点型,3个
var threedouble = [Double](repeating: 0.0, count: 3)

字典

//字典
/*
 swift的字典使用时需要具体规定可以存储的键和值的类型,必须提前定义清楚,方法是通过显性类型标注或者是类型推断
 */
var person = ["age": 18,
                "name": "jack"] as [String : Any]

/*updateValue方法会在键不存在的时候设置值或者在键存在的情况下更新值。这个方法会返回更新值的原值,
 这样方便我们检查更新是否成功
*/
if let oldname = person.updateValue("tom", forKey: "name") {
    print("原来的值:\(oldname)")
}

/*
 2.removeValue方法也可以用来在字典中移除键值对
 3.每一个字典中的数据项都有(key, value)元组的形式返回,并且我们可以使用临时常量或者变量分解这些元组
 */
for (key, value) in person{
    print(key,value)//字典元素是无序的,遍历的时候不能保证顺序
}

var dic = Dictionary<Int , String>()//声明空字典
dic[16] = "年龄"//为键为16,赋值为年龄
print(dic)


dic = [:]//声明空字典的方式二

控制流

//控制流
let base = 3
let power = 10
var answer = 1
for _ in 1...power {//下划线符号_(替代循环中的变量)能够忽略具体的值,并且提供循环遍历时对值的访问
    answer *= base
}
print(answer)

//在switch中case中可以省略break
let count = 3_000_000_000
let countedthings = "stars in the milky way"
var naturalcount : String
switch count {
case 0:
    naturalcount = "no"
case 1...3:
    naturalcount = "a few"
case 4...9:
    naturalcount = "several"
case 10...99:
    naturalcount = "tens of"
case 100...999:
    naturalcount = "hundreds of"
case 1000...9999:
    naturalcount = "thounds of"
default:
    naturalcount = "millions and millions of"
}

函数

//函数
//函数的声明格式:带一个参数,有返回值的函数
func sayhello(personname: String) -> String{
    return "hello" + personname + "!"
}

//调用函数
print(sayhello(personname: "anna"))

//带有2个参数有返回值的函数,中间用逗号分开
func lengthnumber(start: Int, end: Int) -> Int{
    return end - start
}
print(lengthnumber(start: 1, end: 10))

/*
 局部参数名 例如personname,只能在函数体内使用,外部参数名写在局部参数名之前,用
 空格进行分割。
 */
func join(s1: String, toString s2: String, withjoiner joiner: String) -> String {
    return s1 + s2 + joiner
}
print(join(s1: "hello", toString: "swift", withjoiner: "!"))

/*
 joiner的值没有被指定,函数会使用默认值(""),当未给带默认值的参数提供外部
 参数名时,swift会自动提供外部名字。此时,外部参数名字和局部参数名字是一样的
 */


/*
 没有指定返回类型的函数返回void。 在swift中,void和空的元祖是一样的
 */

func addtwoints(a: Int, b: Int) -> Int{
    return a + b
}

func multiplytwoints(a: Int, b: Int) -> Int{
    return a*b
}

/*
 定义一个叫做mathfunction的变量,类型是‘一个有2个int 类型的参数,并返回一个int类型值的函数’
 */
var mathfunction: (Int,Int) -> Int = addtwoints
print("results:\(mathfunction(2, 3))")


/*
 函数也可以当作参数
 */
func printmathresult(mathfunction: (Int, Int) -> Int, a: Int, b: Int){
    print(mathfunction(a, b))
}
print(printmathresult(mathfunction: addtwoints, a: 3, b: 5))

//类
//用class关键字进行标记
class person {
    //定义参数
    var name = "tina"
    var age = 19
    
    //定义函数
    func produce(){
        age += 1
    }
}

补充:结构体和枚举中也可以定义方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容