iOS Swift - печать из Set to Label [дубликат]

Правильный манифест существует в корне приложения на сервере. Выясните корень приложения, например, узнав путь к классу вашего класса:

String rootPath  = getClass().getProtectionDomain().getCodeSource().getLocation().getPath()

Затем замените путь выше указанным путем: пример Glassfish:

/applications/<webProject>/META-INF/MANIFEST.MF

It работа для меня.

266
задан Bartłomiej Semańczyk 10 May 2017 в 10:22
поделиться

18 ответов

Если массив содержит строки, вы можете использовать метод 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)
508
ответ дан gbk 16 August 2018 в 00:26
поделиться
  • 1
    @Andrej: Он работает как с 1.2, так и с 2.0. Вы используете массив строк? – Antonio 3 July 2015 в 18:00
  • 2
    Антонио, извините, мое плохое. У меня была проблема с моим массивом. Теперь я могу подтвердить, что ваше решение работает. :) – Andrej 5 July 2015 в 20:40
  • 3
    "-".join(array) больше не доступен в Swift 2, Xcode 7 Beta 6, попробуйте использовать array.joinWithSeparator("-") – Harry Ng 27 August 2015 в 07:18
  • 4
    joinWithSeparator доступен только для массива строк. Если у вас есть массив других объектов, сначала используйте map. Например, [1, 2, 3].map({"\($0)"}).joinWithSeparator(",") – Dmitry 28 October 2015 в 17:20
  • 5
    @Dmitry Не используйте строчную интерполяцию исключительно для преобразования в строку. Гораздо лучше использовать инициализатор на String – Alexander 27 July 2016 в 04:38

Вы можете распечатать любой объект с помощью функции печати

или использовать \(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]"
0
ответ дан 123FLO321 16 August 2018 в 00:26
поделиться

Чтобы изменить массив необязательных / необязательных строк

//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 в массиве и добавляет другие значения, чтобы создать объединенную строку.

3
ответ дан Agent Smith 16 August 2018 в 00:26
поделиться
  • 1
    Не работает для Swift 4 Xcode 9.2 – Yash Bedi 10 April 2018 в 06:52
  • 2
    @YashBedi В Swift 4 мы используем compactMap вместо flatMap – Agent Smith 10 April 2018 в 07:17
  • 3
    какой смысл & quot; $ & quot; ? – Augusto 27 May 2018 в 23:46
  • 4
    @Augusto Swift автоматически предоставляет имена сокращенных аргументов для встроенных закрытий, которые могут использоваться для ссылки на значения аргументов закрытия именами $ 0, $ 1, $ 2. Здесь $ 0 ссылаются на первые аргументы String. – Agent Smith 28 May 2018 в 08:47

Разделитель может быть плохой идеей для некоторых языков, таких как иврит или японский. Попробуйте следующее:

// 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!)
0
ответ дан Alexey Chekanov 16 August 2018 в 00:26
поделиться

Создать расширение для 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
        }
    }
}
1
ответ дан Bartłomiej Semańczyk 16 August 2018 в 00:26
поделиться

В Swift 4

let array:[String] = ["Apple", "Pear ","Orange"]

array.joined(separator: " ")
8
ответ дан Brandon Minnick 16 August 2018 в 00:26
поделиться

В Swift 2.2 вам может понадобиться передать ваш массив NSArray для использования компонентовJoinedByString (",")

let stringWithCommas = (yourArray as NSArray).componentsJoinedByString(",")
3
ответ дан Carlos Perez Perez 16 August 2018 в 00:26
поделиться
  • 1
    Кстати, это просто перевод объектива-с быстрым. – Muhammad Zeeshan 2 August 2016 в 09:46

Если вы задаете вопрос, это примерно так: tobeFormattedString = ["a", "b", "c"] Выход = "abc"

String(tobeFormattedString)

-1
ответ дан dheeru 16 August 2018 в 00:26
поделиться
  • 1
    Нет, это не работает. String не имеет инициализатора, способного это сделать. Либо вы используете пользовательское расширение, либо стороннюю библиотеку, либо просто ошибаетесь. – Moritz 13 February 2018 в 11:07

Поскольку никто не упомянул сокращение, вот оно:

[0,1,1,0].map{"\($0)"}.reduce(""){$0+$1}//"0110"

В духе функционального программирования

3
ответ дан eonist 16 August 2018 в 00:26
поделиться
  • 1
    Хороший способ сделать что-то, спасибо ... добавив короткий конец командной строки: [0,1,1,0].map{"\($0)"}.reduce("",+). – XLE_22 9 August 2017 в 21:19

Swift 3

["I Love","Swift"].joined(separator:" ") // previously joinWithSeparator(" ")
21
ответ дан hardikdevios 16 August 2018 в 00:26
поделиться
  • 1
    Я бы сказал, что это [«Я люблю», «Свифт»). Присоединен (разделитель: «& quot;») – Loebre 27 September 2016 в 20:43

С 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"
97
ответ дан Imanou Petit 16 August 2018 в 00:26
поделиться
  • 1
    У меня есть строка, которая выглядит так: «[1,2,3]». Есть ли способ легко преобразовать это в массив [Int]? легко, т. е. наоборот, что? – user2363025 26 January 2017 в 16:02

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
}
48
ответ дан l --marc l 16 August 2018 в 00:26
поделиться
let arrayTemp :[String] = ["Mani","Singh","iOS Developer"]
    let stringAfterCombining = arrayTemp.componentsJoinedByString(" ")
   print("Result will be >>>  \(stringAfterCombining)")

Результат будет >>> Mani Singh iOS Developer

2
ответ дан Maninderjit Singh 16 August 2018 в 00:26
поделиться

Работает на NSMutableArray с компонентамиJoinedByString

var array = ["1", "2", "3"]
let stringRepresentation = array.componentsJoinedByString("-") // "1-2-3"
2
ответ дан Onur Var 16 August 2018 в 00:26
поделиться

, если у вас есть список строковых массивов, затем конвертируется в Int

let arrayList = list.map { Int($0)!} 
     arrayList.description

, он даст вам строковое значение

0
ответ дан Oshitha Wimalasuriya 16 August 2018 в 00:26
поделиться

Свифт, эквивалентный тому, что вы описываете, является строковой интерполяцией. Если вы думаете о таких вещах, как JavaScript, выполняющий "x" + array, эквивалент в Swift равен "x\(array)".

Как общее замечание, существует важное различие между строковой интерполяцией и протоколом Printable. Только определенные классы соответствуют Printable. Каждый класс может быть как-то интерполирован. Это полезно при написании общих функций. Вам не нужно ограничивать себя классами Printable.

1
ответ дан Rob Napier 16 August 2018 в 00:26
поделиться

Если вы хотите вырезать пустые строки в массиве.

["Jet", "Fire"].filter { !$0.isEmpty }.joined(separator: "-")

Если вы хотите также фильтровать значения nil:

["Jet", nil, "", "Fire"].flatMap { $0 }.filter { !$0.isEmpty }.joined(separator: "-")
1
ответ дан Sourav Chandra 16 August 2018 в 00:26
поделиться

ДЛЯ 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
    }
}
-1
ответ дан Ty Daniels 16 August 2018 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: