美文网首页
小知识点

小知识点

作者: 得_道 | 来源:发表于2021-01-11 16:44 被阅读0次

关键字说明

@discardableResult
默认情况下编译器就是会去检查返回参数是否有被使用,没有的话就会给出警告。如果你不想要这个警告,可以自己手动加上 @discardableResult

associatedtype
swift中protocol不能使用<T>这种泛型,但是提供了associatedtype关键字来支持泛型


static与class的区别

被class修饰的类型方法,下标,允许被子类重写
被static修饰的类型方法,下标,不允许被子类重写


for-区间运算符用在数组上

let names = ["aaa","bbb", "ccc", "ddd"]
for name in names[0...3] {
    print(name)
}
  • 单侧区间:让区间朝一个方向尽可能远
for name in names[2...] {
    print(name)
}

for name in names[...2] {
    print(name)
}

for name in names[..<2] {
    print(name)
}
let range1 = ...5
range1.contains(7)//false
range1.contains(4)//true
range1.contains(-3)//true

区间类型

let range1: ClosedRange<Int> = 1...3
let range2: Range<Int> = 1..<3
let range3: PartialRangeThrough<Int> = ...5
  • 字符、字符串也能使用区间字符串,但默认不能用在for-in中
let stringRange1 = "cc"..."ff"
stringRange1.contains("cb")
stringRange1.contains("dz")
stringRange1.contains("fg")

let stringRange2 = "a"..."f"
stringRange2.contains("d")
stringRange2.contains("h")

从\0到~囊括了所有可能要用到的ASCII字符

let characterRange: ClosedRange<Character> = "\0"..."~"
characterRange.contains("G")

带间隔的区间值

let hours = 11
let hourInterval = 2
// tickMark的取值: 从4开始,累加2,不超过11
for tickMark in stride(from: 4, through: hours, by: hourInterval) {
    print(tickMark)
} //4 6 8 10

fallthrough

  • 使用fallthrough可以实现贯串效果
var number = 1
switch number {
case 1:
    print("number is 1")
    fallthrough
case 2:
    print("number is 2")
    
default:
    print("number is other")
    
}
//number is 1
//number is 2

标签语句

你可以在循环语句或 switch 语句前面加上标签,它由标签名和紧随其后的冒号(:)组成。在 break 和 continue 后面跟上标签名可以显式地在循环语句或 switch 语句中改变相应的控制流。

outer: for i in 1...4 {
    for k in 1...4 {
        if k == 3 {
            continue outer
        }
        
        if i == 3 {
            break outer
        }
        print("i == \(i), k == \(k)")
    }
}

Swift自带的Print打印函数

public func print(_ items: Any..., separator: String = " ", terminator: String = "\n")
print(1,2,3,4) // 1 2 3 4
print(1,2,3,4, separator: "_") // 1_2_3_4

typealias

用来给类型起别名

typealias Byte = Int8
typealias Short = Int16
typealias Long = Int64
typealias Date = (year: Int, month: Int, day: Int)
func test(_ date: Date) {
    print(date.0)
    print(date.year)
}
test((2020, 10, 9))
typealias IntFn = (Int, Int) -> Int

func difference(v1: Int, v2: Int) -> Int {
    v1 - v2
}

let fn: IntFn = difference
fn(10, 20)

func setFn(_ fn: IntFn) {}
setFn(difference)

func getFn() -> IntFn {
    difference
}
  • 按照Swift的标准库的定义,Void就是空元组()
public typealias Void = ()

延迟执行dispatch_after

OC

__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ {
    __strong typeof(self) pThis = weakSelf;
});


swift

DispatchQueue.main.asyncAfter(deadline: .now()+0.5, execute: {
    
})

变量名与关键字冲突

可以使用('')包裹住变量名,这样就可以用了

/// Shared singleton instance used by all `AF.request` APIs. Cannot be modified.
public static let `default` = Session()

检测API可用性

if #available(iOS 10, macOS 10.12, *) {
    // 在 iOS 使用 iOS 10 的 API, 在 macOS 使用 macOS 10.12 的 API
} else {
    // 使用先前版本的 iOS 和 macOS 的 API
}
if #available(平台名称 版本号, ..., *) {
    APIs 可用,语句将执行
} else {
    APIs 不可用,语句将不执行
}

相关文章

  • android 常用小知识点 tips (二)

    android 常用小知识点 tips (一)android 常用小知识点 tips (二) 持续更新中.... ...

  • js小知识点

    js小知识点 整理 js小知识点 (一):获取元素 1:document.getElementById('id名'...

  • 编程中的小tips

    perl 小知识点 defined () 哈希的长度 数组的uniq R 小知识点 rowMeans() 和 co...

  • 无标题文章

    综和复习本月知识点总结: 一:微信小程序 二:vue复习 三:js复习 四:新知识点 一:微信小程序知识点总结 开...

  • 小知识点集汇一

    小知识点集汇一 小知识点 node接口模拟返回 js接口模拟数据 mockjs mocha js 测试框架--教程...

  • 监听回车按键小知识点整理

    监听回车按键小知识点

  • 两年iOS经验之你忽略的小知识点

    两年iOS经验之你忽略的小知识点 两年iOS经验之你忽略的小知识点

  • 小知识点

    Window 运行输入 winver 可以查看 当前系统版本号 ipconfig 查看本机IP地址 Unity U...

  • 小知识点

    时间格式化 托管项目到线上仓库 基本使用方法使用git init初始化本地项目使用touch README.md ...

  • 小知识点

    Axure 做滚动视图拉一个内联框架,将内联框架的url设置为另外一个网页

网友评论

      本文标题:小知识点

      本文链接:https://www.haomeiwen.com/subject/gkveuktx.html