Правильный манифест существует в корне приложения на сервере. Выясните корень приложения, например, узнав путь к классу вашего класса:
String rootPath = getClass().getProtectionDomain().getCodeSource().getLocation().getPath()
Затем замените путь выше указанным путем: пример Glassfish:
/applications/<webProject>/META-INF/MANIFEST.MF
It работа для меня.
Если массив содержит строки, вы можете использовать метод String
join
:
var array = ["1", "2", "3"]
let stringRepresentation = "-".join(array) // "1-2-3"
В Swift 2:
var array = ["1", "2", "3"]
let stringRepresentation = array.joinWithSeparator("-") // "1-2-3"
Это может быть полезно, если вы хотите использовать определенный разделитель (hypen, blank, comma и т. д.).
В противном случае вы можете просто использовать свойство description
, которое возвращает строковое представление массива:
let stringRepresentation = [1, 2, 3].description // "[1, 2, 3]"
Подсказка: любой объект, реализующий протокол Printable
, имеет свойство description
. Если вы примете этот протокол в своих собственных классах / структурах, вы также сделаете их дружественными к печати
В Swift 3
join
станет joined
, например [nil, "1", "2"].flatMap({$0}).joined()
joinWithSeparator
становится joined(separator:)
(доступно только для Array of Strings) Вы можете распечатать любой объект с помощью функции печати
или использовать \(name)
для преобразования любого объекта в строку.
Пример:
let array = [1,2,3,4]
print(array) // prints "[1,2,3,4]"
let string = "\(array)" // string == "[1,2,3,4]"
print(string) // prints "[1,2,3,4]"
Чтобы изменить массив необязательных / необязательных строк
//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 в массиве и добавляет другие значения, чтобы создать объединенную строку.
Разделитель может быть плохой идеей для некоторых языков, таких как иврит или японский. Попробуйте следующее:
// 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!)
Создать расширение для 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
}
}
}
В Swift 4
let array:[String] = ["Apple", "Pear ","Orange"]
array.joined(separator: " ")
В Swift 2.2 вам может понадобиться передать ваш массив NSArray для использования компонентовJoinedByString (",")
let stringWithCommas = (yourArray as NSArray).componentsJoinedByString(",")
Если вы задаете вопрос, это примерно так: tobeFormattedString = ["a", "b", "c"] Выход = "abc"
String(tobeFormattedString)
String
не имеет инициализатора, способного это сделать. Либо вы используете пользовательское расширение, либо стороннюю библиотеку, либо просто ошибаетесь.
– Moritz
13 February 2018 в 11:07
[0,1,1,0].map{"\($0)"}.reduce(""){$0+$1}//"0110"
В духе функционального программирования
[0,1,1,0].map{"\($0)"}.reduce("",+)
.
– XLE_22
9 August 2017 в 21:19
Swift 3
["I Love","Swift"].joined(separator:" ") // previously joinWithSeparator(" ")
С Swift 3, в соответствии с вашими потребностями, вы можете выбрать один из следующих блоков кода.
Character
в String
без разделителя: let characterArray: [Character] = ["J", "o", "h", "n"]
let string = String(characterArray)
print(string)
// prints "John"
String
в String
без разделителя: let stringArray = ["Foo", "Bar", "Baz"]
let characterArray = stringArray.flatMap { String.CharacterView($0) }
//let characterArray = stringArray.flatMap { $0.characters } // also works
let string = String(characterArray)
print(string)
// prints "FooBarBaz"
String
в String
с разделителем между словами: let stringArray = ["Bob", "Dan", "Bryan"]
let string = stringArray.joined(separator: " ")
print(string)
// prints "Bob Dan Bryan"
String
в String
с разделителем между символами: let stringArray = ["car", "bike", "boat"]
let stringArray2 = stringArray.flatMap { String.CharacterView($0) }.map { String($0) }
let string = stringArray2.joined(separator: ", ")
print(string)
// prints "c, a, r, b, i, k, e, b, o, a, t"
Float
в String
с разделителем между номерами: let floatArray = [12, 14.6, 35]
let stringArray = floatArray.flatMap { String($0) }
let string = stringArray.joined(separator: "-")
print(string)
// prints "12.0-14.6-35.0"
Swift 2.0 Xcode 7.0 beta 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
}
let arrayTemp :[String] = ["Mani","Singh","iOS Developer"]
let stringAfterCombining = arrayTemp.componentsJoinedByString(" ")
print("Result will be >>> \(stringAfterCombining)")
Результат будет >>> Mani Singh iOS Developer
Работает на NSMutableArray с компонентамиJoinedByString
var array = ["1", "2", "3"]
let stringRepresentation = array.componentsJoinedByString("-") // "1-2-3"
, если у вас есть список строковых массивов, затем конвертируется в Int
let arrayList = list.map { Int($0)!}
arrayList.description
, он даст вам строковое значение
Свифт, эквивалентный тому, что вы описываете, является строковой интерполяцией. Если вы думаете о таких вещах, как JavaScript, выполняющий "x" + array
, эквивалент в Swift равен "x\(array)"
.
Как общее замечание, существует важное различие между строковой интерполяцией и протоколом Printable
. Только определенные классы соответствуют Printable
. Каждый класс может быть как-то интерполирован. Это полезно при написании общих функций. Вам не нужно ограничивать себя классами Printable
.
Если вы хотите вырезать пустые строки в массиве.
["Jet", "Fire"].filter { !$0.isEmpty }.joined(separator: "-")
Если вы хотите также фильтровать значения nil:
["Jet", nil, "", "Fire"].flatMap { $0 }.filter { !$0.isEmpty }.joined(separator: "-")
ДЛЯ SWIFT 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
}
}
"-".join(array)
больше не доступен в Swift 2, Xcode 7 Beta 6, попробуйте использоватьarray.joinWithSeparator("-")
– Harry Ng 27 August 2015 в 07:18joinWithSeparator
доступен только для массива строк. Если у вас есть массив других объектов, сначала используйтеmap
. Например,[1, 2, 3].map({"\($0)"}).joinWithSeparator(",")
– Dmitry 28 October 2015 в 17:20