Swiftを使用して、アプリのテキストビューに入力された数値のリストを取得し、成績計算機の各数値を抽出してこのリストの合計を作成しようとしています。また、ユーザーが入力する値の量は毎回変化します。以下に例を示します。
文字列:98,99,97,96 ...取得しようとしています:98 + 99 + 97 + 96 ...
助けてください!ありがとう
components(separatedBy:)
を使用して、コンマ区切りの文字列を分割します。trimmingCharacters(in:)
を使用して、各要素の前後のスペースを削除しますInt()
を使用して、各要素を整数に変換します。compactMap
(以前はflatMap
と呼ばれていました)を使用して、Int
に変換できなかったアイテムを削除します。reduce
を使用して、Int
の配列を合計します。
let input = " 98 ,99 , 97, 96 "
let values = input.components(separatedBy: ",").compactMap { Int($0.trimmingCharacters(in: .whitespaces)) }
let sum = values.reduce(0, +)
print(sum) // 390
SwiftおよびSwift 4の場合。
簡単な方法:ハードコードされています。計算される整数の正確な量がわかっていて、さらに計算して印刷/使用したい場合にのみ役立ちます。
let string98: String = "98"
let string99: String = "99"
let string100: String = "100"
let string101: String = "101"
let int98: Int = Int(string98)!
let int99: Int = Int(string99)!
let int100: Int = Int(string100)!
let int101: Int = Int(string101)!
// optional chaining (if or guard) instead of "!" recommended. therefore option b is better
let finalInt: Int = int98 + int99 + int100 + int101
print(finalInt) // prints Optional(398) (optional)
関数としての派手な方法:一般的な方法。ここでは、最後に必要な数の文字列を入力できます。たとえば、最初にすべての文字列を収集してから、配列を使用して計算することができます。
func getCalculatedIntegerFrom(strings: [String]) -> Int {
var result = Int()
for element in strings {
guard let int = Int(element) else {
break // or return nil
// break instead of return, returns Integer of all
// the values it was able to turn into Integer
// so even if there is a String f.e. "123S", it would
// still return an Integer instead of nil
// if you want to use return, you have to set "-> Int?" as optional
}
result = result + int
}
return result
}
let arrayOfStrings = ["98", "99", "100", "101"]
let result = getCalculatedIntegerFrom(strings: arrayOfStrings)
print(result) // prints 398 (non-optional)
let myString = "556" let myInt = Int(myString)