Julian Home

Life You Life

一些初始化中的关键字

convenience required designated fatalError

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class ClassA { let numA: Int init(num: Int) { numA = num } convenience init(bigNum: Bool) { self...

隐式super.init()

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Cat1 { var name: String init() { name = "cat" } } class Tiger: Cat1 { let power: Int override init() { power = 10 ...

方法嵌套

func{ func{} }

当一个比较复杂的方法,我们一般会拆成几个方法,来调用,这样比较清晰,比如 1 2 3 4 5 6 7 8 9 10 func A () { if (a) { B() }else{ C() } } func B () {} func C () {} 但是当中 B 是永远不会被再此使用,所以一般这个时候我们会使用方法嵌套 1 2 3 4 5 6 7 8 func A () ...

在swift中调用c方法

在swift中调用c方法 ,通过关键字_silgen_name 1 2 3 4 5 6 @_silgen_name("test") func c_test(a: Int32) -> Int32 func testSwift(input: Int32) { let result = c_test(a: input) print(result) } Call te...

String

#indices 通过indices可以拿到string的每个元素 1 2 3 4 let str1 = "123456890" for a in str1.indices { print(a.utf16Offset(in: str1)) } 拿到指定的first or last str1[str1.indices.first!] str1[str1.indices.las...

操作符

Swift 支持重载操作符这样的特性,所以我们可以设计自己的运算符 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 precedencegroup MyPrecedence { // higherThan: AdditionPrecedence // 优先级,比加法运算高 lowerThan: Multi...

@ autoclosure

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 func logIfTrue(predicate: () -> Bool) { if predicate() { print("true") } } logIfTrue { () -> Bool in 2 > 1 } logIfT...

Tuple

Tuple 交换swap 1 2 3 4 5 6 7 func swapME<T>(c: inout T, d: inout T) { (c, d) = (d, c) } var test1 = 1 var test2 = 2 swapME(c: &test1, d: &test2) 参数传递通过2种方式:1.引用类型(指针)2.值传递 ...

mutating

mutating 使用 swift 中 protocol 可以被 class,enum ,struct 使用 class 可以随便更改自己的var,不需要加 enum 和 struct 必须加,当然会提示你添加 1 2 3 4 5 6 7 8 9 10 11 12 13 protocol testMutating { var a: Int { get set } ...

Currying

柯里化

Currying 已废弃 ` *deprecated ` 是swift函数式编程思想的重点表现 swift中通过把method Currying ,把接收多个参数的方法变成接收第一个参数,然后返回接收剩余的参数,返回结果的新方法,在后续的使用中很像链式编程。 1 2 3 4 5 6 func test (a: Int)(b: Int) -> Int { return ...