Подтвердить что ты не робот

Сортировка массива в алфавитном порядке в быстром

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

func updateSearchResults(data: NSData?)
{
    do
    {
            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)

            if let blogs: NSArray = json["results"] as? [AnyObject] {
                print(blogs)
                for blog in blogs {
                    if let name = blog["original_title"] as? String {
                        names.addObject(name)
                    }
                }
                print(names)
                **let sortedArray = sorted(names, {
                (str1: String, str2: String) -> Bool in
                return str1.toInt() < str2.toInt()** // Here I am getting the Error Message
                })

            }
    }
    catch {
        print("error serializing JSON: \(error)")
    }
}

Сообщение об ошибке, которое я получаю, "Невозможно вызвать" отсортировано "с помощью списка аргументов типа (NSMutableArray, (String, String) → Bool)"

Я много пытался добиться этого, но я не нашел решения. Может ли кто-нибудь помочь мне решить эту проблему. Спасибо заранее.

4b9b3361

Ответ 1

Сначала преобразуйте NSMutableArray в Array, используя строку кода ниже.

let swiftArray = mutableArray as AnyObject as! [String]

Используйте следующую строку кода для сортировки массива.

var sortedArray = names.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }

Проверьте ссылку ниже для sort. https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html

Обновление для Swift 3.0

var sortedArray = swiftArray.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }

Ответ 2

Используйте этот простой код строки для сортировки массива ur

 let sortedNames = names.sort { $0.name < $1.name }

Для Swift 4 вы можете использовать только этот

let sortedNames = names.sorted(by: <)

Ответ 3

Swift4

var names = [ "Alpha", "alpha", "bravo", "beta"]
var sortedNames = names.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha","beta", "bravo"]

Ответ 4

Для массива объектов:

items = items.sorted(by: { (item1, item2) -> Bool in
        return item1.product.name.compare(item2.product.name) == ComparisonResult.orderedAscending
    })

Ответ 5

Swift 4 (рабочий код)

Ответ JSON → Хранится в aryNameList

"DATA": [
{
        email = "[email protected]";
        firstname = Harvey
},
{
        email = "[email protected]";
        firstname = poonam
},
{
        email = "[email protected]";
        firstname = rahul
},
{
        email = "[email protected]";
        firstname = Chulbulx
},
{
        email = "[email protected]";
        firstname = rahul
},
{
        email = "[email protected]";
        firstname = Jay
},
{
        email = "[email protected]";
        firstname = Roy
},
{
        email = "[email protected]";
        firstname = Regan
},
{
        email = "[email protected]";
        firstname = Jaydip
}
]

Код

    self.aryNameList = self.aryNameList.sorted(by: { (Obj1, Obj2) -> Bool in
       let Obj1_Name = Obj1.firstname ?? ""
       let Obj2_Name = Obj2.firstname ?? ""
       return (Obj1_Name.localizedCaseInsensitiveCompare(Obj2_Name) == .orderedAscending)
    })

работает каждый случай (например: lowerCase, upperCase..)

Ответ 6

Попробуйте этот

var names = [ "Alpha", "alpha", "bravo"]
var sortedNames = names.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
print(sortedNames) //Logs ["Alpha", "alpha", "bravo"]

Ответ 7

Решение Swift 3:

let yourStringArray = [ "beTA", "ALPha", "Beta", "Alpha"]
var sortedArray = yourStringArray.sorted()
// Result will be ["ALPha", "Alpha", "Beta", "beTA"]

Кредиты для jjatie

Ответ 8

Создать новое приложение с одним представлением

Создайте в приложении группу с именем "Шрифты", добавьте файлы шрифтов (отметьте галочкой "Копировать файлы", если необходимо).

В info.plist добавьте "Шрифты, предоставляемые приложением", добавьте каждый элемент для каждого шрифта, например, элемент 0: AlexBrush-Regular.ttf, элемент 1: Fipps-Regular.otf

Или отредактируйте info.plist напрямую:

<key>UIAppFonts</key>
<array>
    <string>AlexBrush-Regular.ttf</string>
    <string>Fipps-Regular.otf</string>
</array>

Вырежьте и вставьте этот код swift 5 в ViewController.swift, запустите симулятор, добавьте фильтр в журнал консоли, используя имя вашего шрифта

//
//  ViewController.swift
//  FontsApp
//
//  Created by Gary Davies on 28/3/19.
//  Copyright © 2019 Gary Davies. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    var fontFamilyNames: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        fontNames()
    }

    func fontNames() {
        getFontNames()
        sortFontNames()
        printFontName()
    }

    func getFontNames() {
        fontFamilyNames.removeAll()
        for name in UIFont.familyNames {
            fontFamilyNames.append(name)
        }
    }

    func sortFontNames() {
        let sorted = fontFamilyNames.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }
        fontFamilyNames.removeAll()
        for name in sorted {
            fontFamilyNames.append(name)
        }
    }

    func printFontName() {
        for name in fontFamilyNames {
            print(name, "=>", UIFont.fontNames(forFamilyName: name))
        }
    }
}