Swiftで文字列を連結するにはどうすればよいですか?


188

Swiftで文字列を連結する方法は?

ではObjective-C、私たちは好きです

NSString *string = @"Swift";
NSString *resultStr = [string stringByAppendingString:@" is a new Programming Language"];

または

NSString *resultStr=[NSString stringWithFormat:@"%@ is a new Programming Language",string];

しかし、私はこれをSwift言語で実行したいと考えています。


1
+ Swiftコンパイラーはうまくコンパイルできません。文に+が2つある場合、失敗する可能性があります。使用()
kelalaka

回答:


335

文字列はいくつかの方法で連結できます。

let a = "Hello"
let b = "World"

let first = a + ", " + b
let second = "\(a), \(b)"

あなたも行うことができます:

var c = "Hello"
c += ", World"

他にも方法はあると思います。

説明のビット

let定数を作成します。(のようなものNSString)。いったん設定した値は変更できません。ただし、それを他のものに追加して新しい変数を作成することはできます。

var変数を作成します。(一種のNSMutableString)なので、値を変更できます。しかし、これはスタックオーバーフローで何度か回答されています(letとvarの違いを参照してください)。

注意

現実ではletvarされている非常に異なるからNSStringNSMutableString、それは類推に役立ちます。


@ Rajneesh071コンパイル時にエラーが発生するのはなぜですか?
フォグマイスター2014年

let定数を作成します。(NSStringのようなもの)。いったん設定した値は変更できません。ただし、それを他のものに追加して新しい変数を作成することはできます。var変数を作成します。(NSMutableStringのようなもの)なので、その値を変更できます。しかし、これはSOで何度か回答されています。探しdifference between let and var
Fogmeister

let a = "Hello" let b = "World" let first = a + "、" + b機能しません。これが機能します。let first = "(a)、(b)"です。最初の方法で実行時エラーが発生します
ジョセフ

1
@ジョセフは私のためにうまく働きます。i.imgur.com/T15s4Sp.png反対票をありがとうございます。
Fogmeister 2014年

@Fogmeister xCodeのどのバージョンを使用していますか?xCode 6.3 Betaで動作しない、おそらく最新バージョンで動作する
Joseph

62

次の方法で文字列を追加できます。

  • str += ""
  • str = str + ""
  • str = str + str2
  • str = "" + ""
  • str = "\(variable)"
  • str = str + "\(variable)"

私はそれらすべてに名前を付けたと思います。



13

これも機能します:

var string = "swift"
var resultStr = string + " is a new Programming Language"

11

\これは、ある文字列を別の文字列に追加するために使用されています。

var first = "Hi" 
var combineStr = "\(first) Start develop app for swift"

これも試すことができます:-+キーワード。

 var first = "Hi" 
 var combineStr = "+(first) Start develop app for swift"

このコードを試してください。



9

非常にシンプル:

let StringA = "Hello"
let StringB = "World"
let ResultString = "\(StringA)\(StringB)"
println("Concatenated result = \(ResultString)")

またはlet ResultString = "\(StringA)\(StringB)"
Aks

補間を使用する場合、Aksが述べたように+は必要ありません。+を使用する場合は、補間を削除します。
Raghu Teja 2015年

9

SwiftでstringByAppendingStringを使用できるようになりました。

var string = "Swift"
var resultString = string.stringByAppendingString(" is new Programming Language")

5

Xcodeは、通常の文字列で追加されたオプションの文字列を受け入れませんでした。私はその問題を解決するためにこの拡張機能を書きました:

extension String {
    mutating func addString(str: String) {
        self = self + str
    }
}

それからあなたはそれを次のように呼び出すことができます:

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1.addString(str2)
println(str1) //hi my name is

ただし、次のようなこともできます。

var str1: String?
var str1 = "hi"
var str2 = " my name is"
str1! += str2

どの部分?エクステンションについて知っていますか?
Esqarrouth

はい、「+」を「addString()」に変換することで何が得られるのかと思っていました。私が正しく覚えていれば、この方法を変更できない変数で使用すると、コンパイラエラーではなく警告が表示されます。そうでなければ、何が起こっているのかを難読化し、IMO、 '+'よりも簡単で高速なものはありません。真実は、私が盲目である理由があるかもしれないということであり、それがなぜ私がこの方法が「推奨される」のかを尋ねていた理由です
user3802077

これは、xcodeがオプションの文字列を通常の文字列に追加することを受け入れなかったときに使用しました。それはまだ直接は行いませんが、文字列を強制的にアンラップすると機能するようになったため、この拡張機能は役に立ちません。これを読んだ後、コメントを残して削除します
Esqarrouth

外植をありがとう:)。何が良いと考えられるかはわかりませんが、あなたの答えにコンテキストを追加することで、それは今でもタフでさえ価値があります。
user3802077

4

文字列補間と呼ばれます。これは、定数、変数、リテラル、および式を使用して新しい文字列を作成する方法です。たとえば:

      let price = 3
      let staringValue = "The price of \(price) mangoes is equal to \(price*price) "

また

let string1 = "anil"
let string2 = "gupta"
let fullName = string1 + string2  // fullName is equal to "anilgupta"
or 
let fullName = "\(string1)\(string2)" // fullName is equal to "anilgupta"

文字列値を連結することも意味します。

これがお役に立てば幸いです。


3

組み合わせた文字列を印刷するには

Println("\(string1)\(string2)")

またはString3は、2つの文字列の組み合わせの出力を格納します

let strin3 = "\(string1)\(string2)"

3

SwiftでstringByAppendingFormatを使用することもできます。

var finalString : NSString = NSString(string: "Hello")
finalString = finalString.stringByAppendingFormat("%@", " World")
print(finalString) //Output:- Hello World
finalString = finalString.stringByAppendingFormat("%@", " Of People")
print(finalString) //Output:- Hello World Of People

2

Swift 4.2

拡張機能を使用することもできます。

extension Array where Element == String? {
    func compactConcate(separator: String) -> String {
        return self.compactMap { $0 }.filter { !$0.isEmpty }.joined(separator: separator)
    }
}

使用する:

label.text = [m.firstName, m.lastName].compactConcate(separator: " ")

結果:

"The Man"
"The"
"Man"

2

From:Matt Neuburg Book「Swiftを使用したiOS 13プログラミングの基礎」:

2つの文字列を結合(連結)するには、+演算子を使用するのが最も簡単な方法です。

let s = "hello"
let s2 = " world"
let greeting = s + s2

+演算子がオーバーロードされているため、この便利な表記法が可能です。これは、オペランドが数値の場合(数値の加算)と、オペランドが文字列の場合(連結)に実行されます。+演算子は付属しています+ =代入ショートカット。当然、左側の変数はvarで宣言されている必要があります。

var s = "hello"
let s2 = " world"
s += s2

代替する+ =、あなたが呼び出すことができAPPENDを(_ :)インスタンスメソッド:

var s = "hello"
let s2 = " world"
s.append(s2)

文字列を連結する別の方法はjoined(separator :)メソッドを使用することです。連結する文字列の配列から始め、それらすべての間に挿入する文字列を渡します。

let s = "hello"
let s2 = "world"
let space = " "
let greeting = [s,s2].joined(separator:space)


1

私はObjective-CからSwift(4)に切り替えたところ、次のように頻繁に使用することがわかりました。

let allWords = String(format:"%@ %@ %@",message.body!, message.subject!, message.senderName!)

0

Swift 5では、Appleは#記号を使用したRaw文字列を導入しています。

例:

print(#"My name is "XXX" and I'm "28"."#)
let name = "XXX"
print(#"My name is \#(name)."#)

記号#は\の後に必要です。通常の\(name)は文字列内の文字として解釈されます。


0

スウィフト5

あなたはそれを使用してそれを達成することができます appendingAPIます。これは、指定された文字列をレシーバーに追加することによって作成された新しい文字列を返します。

APIの詳細:こちら

使用

var text = "Hello"
text = text.appending(" Namaste")

結果

Hello
Hello Namaste
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.