프로그래밍 방식으로 수행하는 방법을 알고 있지만 기본 제공 방법이 있다고 확신합니다.
내가 사용한 모든 언어에는 배열과 문자열을 연결하거나 print () 함수 등에 전달하려고 할 때 뱉어 질 객체 모음에 대한 일종의 기본 텍스트 표현이 있습니다. Apple의 Swift 언어 배열을 쉽게 문자열로 변환하는 기본 제공 방법이 있습니까? 아니면 배열을 문자열로 지정할 때 항상 명시해야합니까?
프로그래밍 방식으로 수행하는 방법을 알고 있지만 기본 제공 방법이 있다고 확신합니다.
내가 사용한 모든 언어에는 배열과 문자열을 연결하거나 print () 함수 등에 전달하려고 할 때 뱉어 질 객체 모음에 대한 일종의 기본 텍스트 표현이 있습니다. Apple의 Swift 언어 배열을 쉽게 문자열로 변환하는 기본 제공 방법이 있습니까? 아니면 배열을 문자열로 지정할 때 항상 명시해야합니까?
답변:
배열에 문자열이 포함 된 경우 String
의 join
메소드를 사용할 수 있습니다 .
var array = ["1", "2", "3"]
let stringRepresentation = "-".join(array) // "1-2-3"
에서 스위프트 2 :
var array = ["1", "2", "3"]
let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"
특정 구분 기호 (하이픈, 공백, 쉼표 등)를 사용하려는 경우에 유용 할 수 있습니다.
그렇지 않으면 description
속성을 사용 하여 배열의 문자열 표현을 반환 할 수 있습니다 .
let stringRepresentation = [1, 2, 3].description // "[1, 2, 3]"
힌트 : Printable
프로토콜을 구현하는 모든 객체 에는 description
속성이 있습니다. 자신의 클래스 / 구조체에서 해당 프로토콜을 채택하면 인쇄를 친숙하게 만듭니다.
에서 스위프트 3
join
해진다 joined
예[nil, "1", "2"].flatMap({$0}).joined()
joinWithSeparator
가된다 joined(separator:)
(문자열의 배열 만 가능)에서 스위프트 4
var array = ["1", "2", "3"]
array.joined(separator:"-")
"-".join(array)
Swift 2, Xcode 7 Beta 6에서 더 이상 사용할 수 없습니다.array.joinWithSeparator("-")
joinWithSeparator
문자열 배열에만 사용할 수 있습니다. 다른 객체의 배열이 있으면 map
먼저 사용하십시오 . 예 :[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
Swift 5를 사용하면 필요에 따라 다음 놀이터 샘플 코드 중 하나를 선택하여 문제를 해결할 수 있습니다.
Character
s 배열을 String
구분 기호없이 로 변환 :let characterArray: [Character] = ["J", "o", "h", "n"]
let string = String(characterArray)
print(string)
// prints "John"
String
s 배열을 String
구분 기호없이 로 변환 :let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: "")
print(string) // prints: "BobDanBryan"
String
s 배열을 로 String
바꿉니다.let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: " ")
print(string) // prints: "Bob Dan Bryan"
String
s 배열을 로 String
바꿉니다.let stringArray = ["car", "bike", "boat"]
let characterArray = stringArray.flatMap { $0 }
let stringArray2 = characterArray.map { String($0) }
let string = stringArray2.joined(separator: ", ")
print(string) // prints: "c, a, r, b, i, k, e, b, o, a, t"
Float
s 배열을 로 String
바꿉니다.let floatArray = [12, 14.6, 35]
let stringArray = floatArray.map { String($0) }
let string = stringArray.joined(separator: "-")
print(string)
// prints "12.0-14.6-35.0"
try JSONDecoder().decode([Int].self, from: Data(string.utf8))
Swift 2.0 Xcode 7.0 베타 6 이후 joinWithSeparator()
대신 다음을 사용 합니다 join()
.
var array = ["1", "2", "3"]
let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"
joinWithSeparator
확장으로 정의됩니다 SequenceType
extension SequenceType where Generator.Element == String {
/// Interpose the `separator` between elements of `self`, then concatenate
/// the result. For example:
///
/// ["foo", "bar", "baz"].joinWithSeparator("-|-") // "foo-|-bar-|-baz"
@warn_unused_result
public func joinWithSeparator(separator: String) -> String
}
스위프트 3
["I Love","Swift"].joined(separator:" ") // previously joinWithSeparator(" ")
선택적 / 비 선택적 문자열의 배열을 변경하려면
//Array of optional Strings
let array : [String?] = ["1",nil,"2","3","4"]
//Separator String
let separator = ","
//flatMap skips the nil values and then joined combines the non nil elements with the separator
let joinedString = array.flatMap{ $0 }.joined(separator: separator)
//Use Compact map in case of **Swift 4**
let joinedString = array.compactMap{ $0 }.joined(separator: separator
print(joinedString)
여기서 flatMap , compactMap 은 배열의 nil 값을 건너 뛰고 다른 값을 추가하여 결합 된 문자열을 제공합니다.
Swift 2.2에서는 componentsJoinedByString ( ",")을 사용하기 위해 배열을 NSArray로 캐스트해야 할 수도 있습니다.
let stringWithCommas = (yourArray as NSArray).componentsJoinedByString(",")
배열에 빈 문자열을 버리고 싶다면.
["Jet", "Fire"].filter { !$0.isEmpty }.joined(separator: "-")
nil 값도 필터링하려면 다음을 수행하십시오.
["Jet", nil, "", "Fire"].flatMap { $0 }.filter { !$0.isEmpty }.joined(separator: "-")
에 대한 확장을 만듭니다 Array
:
extension Array {
var string: String? {
do {
let data = try JSONSerialization.data(withJSONObject: self, options: [.prettyPrinted])
return String(data: data, encoding: .utf8)
} catch {
return nil
}
}
}
구분 기호는 히브리어 나 일본어와 같은 일부 언어에는 좋지 않습니다. 이 시도:
// Array of Strings
let array: [String] = ["red", "green", "blue"]
let arrayAsString: String = array.description
let stringAsData = arrayAsString.data(using: String.Encoding.utf16)
let arrayBack: [String] = try! JSONDecoder().decode([String].self, from: stringAsData!)
다른 데이터 유형의 경우 :
// Set of Doubles
let set: Set<Double> = [1, 2.0, 3]
let setAsString: String = set.description
let setStringAsData = setAsString.data(using: String.Encoding.utf16)
let setBack: Set<Double> = try! JSONDecoder().decode(Set<Double>.self, from: setStringAsData!)
string array list가 있으면 Int로 변환하십시오.
let arrayList = list.map { Int($0)!}
arrayList.description
그것은 당신에게 문자열 값을 줄 것입니다
이 시도:
let categories = dictData?.value(forKeyPath: "listing_subcategories_id") as! NSMutableArray
let tempArray = NSMutableArray()
for dc in categories
{
let dictD = dc as? NSMutableDictionary
tempArray.add(dictD?.object(forKey: "subcategories_name") as! String)
}
let joinedString = tempArray.componentsJoined(by: ",")
스위프트 3
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if textField == phoneField
{
let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
let components = newString.components(separatedBy: NSCharacterSet.decimalDigits.inverted)
let decimalString = NSString(string: components.joined(separator: ""))
let length = decimalString.length
let hasLeadingOne = length > 0 && decimalString.character(at: 0) == (1 as unichar)
if length == 0 || (length > 10 && !hasLeadingOne) || length > 11
{
let newLength = NSString(string: textField.text!).length + (string as NSString).length - range.length as Int
return (newLength > 10) ? false : true
}
var index = 0 as Int
let formattedString = NSMutableString()
if hasLeadingOne
{
formattedString.append("1 ")
index += 1
}
if (length - index) > 3
{
let areaCode = decimalString.substring(with: NSMakeRange(index, 3))
formattedString.appendFormat("(%@)", areaCode)
index += 3
}
if length - index > 3
{
let prefix = decimalString.substring(with: NSMakeRange(index, 3))
formattedString.appendFormat("%@-", prefix)
index += 3
}
let remainder = decimalString.substring(from: index)
formattedString.append(remainder)
textField.text = formattedString as String
return false
}
else
{
return true
}
}
array.description
또는 사용자 정의 구분 기호를 원하는 경우array.joined(separator: ",")