Сортировка массива в алфавитном порядке в быстром
Я новичок в 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)"
Я много пытался добиться этого, но я не нашел решения.
Может ли кто-нибудь помочь мне решить эту проблему.
Спасибо заранее.
Ответы
Ответ 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))
}
}
}