Swift を使用して文字列変数から最後の文字を削除するにはどうすればよいですか? ドキュメントでは見つかりません。
完全な例は次のとおりです。
var expression = "45+22"
expression = expression.substringToIndex(countElements(expression) - 1)
ベストアンサー1
Swift 4.0 (Swift 5.0 とも呼ばれる)
var str = "Hello, World" // "Hello, World"
str.dropLast() // "Hello, Worl" (non-modifying)
str // "Hello, World"
String(str.dropLast()) // "Hello, Worl"
str.remove(at: str.index(before: str.endIndex)) // "d"
str // "Hello, Worl" (modifying)
スウィフト3.0
API が少し高速になり、その結果 Foundation 拡張機能が少し変更されました。
var name: String = "Dolphin"
var truncated = name.substring(to: name.index(before: name.endIndex))
print(name) // "Dolphin"
print(truncated) // "Dolphi"
またはインプレースバージョン:
var name: String = "Dolphin"
name.remove(at: name.index(before: name.endIndex))
print(name) // "Dolphi"
Zmey、Rob Allen、ありがとう!
Swift 2.0+ の方法
これを実現するにはいくつかの方法があります。
Swift ライブラリの一部ではないにもかかわらず、Foundation 拡張機能を介して:
var name: String = "Dolphin"
var truncated = name.substringToIndex(name.endIndex.predecessor())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
メソッドを使用するremoveRange()
( を変更するname
):
var name: String = "Dolphin"
name.removeAtIndex(name.endIndex.predecessor())
print(name) // "Dolphi"
関数の使用dropLast()
:
var name: String = "Dolphin"
var truncated = String(name.characters.dropLast())
print(name) // "Dolphin"
print(truncated) // "Dolphi"
古い String.Index (Xcode 6 Beta 4 +) の方法
Swift の型は優れた UTF-8 サポートを提供することを目的としているためString
、型を使用して文字のインデックス/範囲/部分文字列にアクセスできなくなりましたInt
。代わりに、次を使用しますString.Index
。
let name: String = "Dolphin"
let stringLength = count(name) // Since swift1.2 `countElements` became `count`
let substringIndex = stringLength - 1
name.substringToIndex(advance(name.startIndex, substringIndex)) // "Dolphi"
あるいは(より実用的だが教育的ではない例として)以下を使用することもできますendIndex
:
let name: String = "Dolphin"
name.substringToIndex(name.endIndex.predecessor()) // "Dolphi"
注:私は見つけたこれ理解するための素晴らしい出発点となるString.Index
旧(ベータ4以前)の方法
substringToIndex()
関数を、 の長さより 1 少ない値を指定して使用するだけですString
。
let name: String = "Dolphin"
name.substringToIndex(countElements(name) - 1) // "Dolphi"