Закриття:
Використання змінних, що утримують функцію, а також використання самої функції може допомогти:
65 байт:
var r:(String,Int)->String={return String(repeating:$0,count:$1)}
66 байт:
func r(s:String,i:Int)->String{return String(repeating:s,count:i)}
Тут невелика різниця, але вона відображатиметься більше у деяких пазлах.
Функції скорочення:
Перегляд попереднього прикладу мені щось нагадує. Іноді, якщо ви будете використовувати функцію достатньо разів, варто перейменувати її:
Це:
String(repeating:$0,count:$1)
До цього:
var r:(String,Int)->String={return String(repeating:$0,count:$1)}
Або, власне, це краще:
var r=String.init(repeating:count:)
Таким чином ви просто дзвоните r("Hello World",8)
замістьString(repeating:"Hello World",count:8)
Вихід із декларацій типу:
Я одного разу створив закриття, не встановлюючи тип аргументу, таким чином створивши коротшу відповідь:
var f={(i)->Int in i-1+i%2*2}
Компілятор зробив висновок, що i
є в Int
.
Швидкий шлях створення масивів:
Якщо вам потрібен масив Ints
, використовуйте a, Range
щоб створити його:
Array(0...5)
Це робить те саме, що:
[0,1,2,3,4,5]
Масиви замість If
або Switch
:
Замість цього:
if n==0{return "a"}else if n==1{return "b"}else{return "c"}
Можливо, ви можете це зробити:
return ["a","b","c"][n]
Скоротити типи:
Якщо ви багато використовуєте конверсію типів, ви можете створити псевдонім типу:
typealias f=Float
Карта:
Пам'ятайте, що часто не потрібно використовувати return
ключове слово у map
функції.
Запуск Swift Online:
Хоча Try It Online не підтримує Swift It зараз !