Затворы:
Использование переменных, удерживающих функцию, против использования самой функции может помочь:
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
, используйте 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, он делает это сейчас !