swift-基础-基本语法2

字符串

  • Swift中不用写@
  • Swift中的字符串不是对象,而是个结构体
  • Swift中的字符串的性能比OC中高
  • 虽然Swift的字符串是结构体,OC中是对象,但在Swift开发中可以在这两个数据类型中快速切换
  • 获取长度不再是length,现在是characters.count
  • 判断是否等于某个字符串直接用等于号if str == "123"
  • Swift字符串可以快速遍历
var str = "lhj"
for c in str.characters
{
    print(c)
}
  • 字符串拼接:Swift中不支持%@等占位符,改用反斜杠,或者用+连接
let name = "lhj"
let age = 29
// 目标:输出name = lhj,age = 29
//OC中:NSLog(@"name = %@,age = %d",name,age)
print("name = \(name),age = \(age)")
print("name = " + name + ",age = " + age)
  • 不支持占位符导致一个问题:比如希望保留两位小数,以前可以这么做%.2f,现在必须先转成字符串处理
let value = 10.987654321
let str = String(format:"%.2f",arguments:[value])
print(str)
let str2 = String(format:"%02d-%02d-%02d",arguments:[16,2,12])
print(str2)
  • 字符串截取:比较难,建议先把Swift字符串转成OC字符串进行操作,再转回来(其它OC中的字符串方法而Swift中没有的也这么做)
let str = "xiaomage"
let str1 = str as NSString
//或者let str1:NSString = str
let str2 = str1.substringWithRange(NSMakeRange(0,4))
//或者和并起来
let str3 = (str as NSString).substringWithRange(NSMakeRange(0,4))
//其它使用场景
let str4 = "user/desktop/abc.txt"
print((str4 as NSString).pathExtension)
  • 替换字符串
urlStr = urlStr.stringByReplacingOccurrencesOfString("thumbnail", withString: "bmiddle")
  • 查看是否以xxx结尾 (并且忽略大小写)
let flag = url?.absoluteString.lowercaseString.hasSuffix("gif")

函数

  • 格式: func 函数名称(参数列表) -> 返回值类型 {}
  • func相当于OC中的短横-,class func相当于类方法+
  • 没有返回值没有参数
func say() -> Void
{
    print("hello")
}
say()
// 如果没有返回值,Void可以用()代替 :func say() -> ()
// 如果没有返回值,返回值类型也可以省略:func say()
  • 有返回值,没有参数
fun getMax() -> Int
{
    return 99
}
print(getMax())
  • 没返回值,有参数
func sum(a: Int, b: Int)
{
    print("sum = \(a + b)")
}
sum(10, b: 20) // 从Swift2.0开始,会自动将第二个参数开始的参数名称作为方法标签(比如这里的b)
  • 单独指定方法标签,提高阅读性
    • 可以在内部参数前面加上外部参数,加个空格
    • 这里width和height就是外部参数,为了提高阅读性
    • a和b是内部参数,为函数所使用
func square(width a: Int,height b: Int)
{
    print("square = \(a * b)")
}
square(width: 10, height: 20)
  • 默认值:如果某个参数有默认值,那么调用这个方法的时候这个参数可以忽略,使用默认值
    • 其它方法早就有默认值这个概念了,但其它语言中的默认值只能写在形参列表的最后面,Swift可以随便写在哪
func square(width a: Int,height b: Int = 10)
{
    print("square = \(a * b)")
}
square(width: 10)
  • 有返回值有参数
func square1(width a:Int = 10, height b:Int = 20) -> Int

{

    return a * b

}

square1()

返回多个值:用元祖

    func calculateImageSize() -> (CGSize,CGSize) {

        

    }
// 调用

let (size1, size2) = calculateImageSize()

泛型

  • 具体是什么类型,由调用者确定:传递的是什么类型,那么就是什么类型
  • 如果想在函数中使用泛型,那么必须告诉系统这是一个泛型函数
func 函数名称<T>(形参列表) -> 返回值类型
{}
func KSLog<T>(message: T, fileName: String = #file, methodName: String = #function, lineNumber: Int = #line) {

    let haha = (fileName as NSString).pathComponents.last!.componentsSeparatedByString(".").first!

    

    print("\(haha) - \(methodName)[\(lineNumber)]:\(message)")

}
// 调用者可以使用任意类型的"message"
KSLog("卧槽")

KSLog([Int]())

修饰符

  • 控制器A中有个方法MM,外界比如控制器B,只要拿到控制器A就可以使用这个MM方法。Swift针对这个现象加了处理办法:方法前面加private修饰
    • internal:默认权限,在同一个framework内都可以访问。什么都不写就是这个。
    • private:只能在当前文件访问
    • public:最大权限,可以在整个工程访问
    • 这些修饰符可以修饰属性、方法、类。在企业开发中建议严格控制权限,勤加private
    • 注意:举例:别的控制器的按钮A添加点击方法click,click前面加private修饰,会报错。因为click是运行循环触发的,不是当前类。而相同情况在OC中没有问题,因为OC是动态派发的,而Swift中所有东西都是在编译的时候确定的(更快)。这里的解决方法是在前面再加@objc,意思是让该方法兼容OC(也支持动态派发)
      • addtarget的方法如果是private的也会有这个问题,要加@objc
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容