Расширьте класс Int, добавив в него свойства asDouble
, asFloat
и asString
, возвращающие исходное целое число в преобразованном к другому типу данных виде (к Double
, к Float
, к String
)
Пример
[Int] 12.asDouble -> [Double] 12
extension Int { var asDouble: Double { return Double(self) } var asFloat: Float { return Float(self) } var asString: String { return String(self) } }
3 Comments
extension Int { var asFloat: Float {return Float(self)} var asDouble: Double {return Double(self)} var asString: String {return String(self)}} 12.asFloat //1212.asDouble //1212.asString // «12»
Для второго задания такой вариант выглядит интереснее, как по мне (был вариант еще короче, но предпочел 2 условия с возможностью повторного использования переменной с индексом second, нежели с 1 условием, но с сырым обращением ко второму символу.
extension String {
func crypt()->String {
let strAsArr = self.split(separator: » «) //разделение строки на массив по пробелам
var result: [String] = []
for i in strAsArr {
let word = String(i)
let first = word.startIndex // индекс первого символа
var resultWord = String(word[first].unicodeScalars[first].value) // переменная для текущего слова сразу с кодовой точкой
if word.count > 1 {
let second = word.index(after: first) // индекс второго символа
if word.count > 2 {
let last = word.index(before:word.endIndex) // индекс последнего символа
resultWord += String(word[last])+String(word[word.index(second, offsetBy: 1)..<last])+String(word[second]) // конкатенация последний символ + подстрока после второго сивола до последнего + второй символ
} else {
resultWord += String(word[second]) // конкатенация второго символа
}
}
result.append(resultWord)
}
return result.joined(separator: " ")
}
}
"Я учу Swift".crypt()
Для 6 задания тоже как вариант:
extension Int {
subscript(_ a:Int)->String? {
let word = String(self)
guard (1…word.count).contains(a) else {
return nil
}
let resultNum = word.index(word.startIndex, offsetBy: a-1)
let result = word[resultNum]
return String(result)
}
}
345[1]