Вопрос по swift – Использование программирования значения ключа (KVP) с Swift

7

В Objective-C с Какао многие задачи могут быть выполнены без явных циклов с использованием программирования значения ключа (KVP). Например, я могу найти наибольшее число в массиве с одной строкой кода:

NSNumber * max = [numbers valueForKeyPath:@"@max.intValue"];

Как я могу сделать то же самое с Swift? Массивы не поддерживают метод valueForKeyPath.

Ваш Ответ

4   ответа
2

Вы также можете использовать функцию уменьшения массива

let numbers = [505,4,33,12,506,21,1,0,88]
let biggest = numbers.reduce(Int.min,{max($0, $1)})
println(biggest) // prints 506

Хорошее объяснениеВот

1

Вы все еще можете использовать (по крайней мере)didSet willSet предоставленный Swift на свойствах. Я думаю, это лучше, чем ничего.

0

Я не уверен насчет KVP, но в настоящее время KVO не поддерживается в Swift. Смотрите также эту ветку форумов разработчиков:

https://devforums.apple.com/thread/227909

22

Массив будет фактически реагировать на функцию valueForKeyPath - вам просто нужно привести массив кAnyObject так что компилятор не жалуется. Следующее:

var max = (numbers as AnyObject).valueForKeyPath("@max.self") as Double

или даже, для объединения объектов:

(labels as AnyObject).valueForKeyPath("@unionOfObjects.text")

Еслиlabels выше коллекция меток, выше вернет массив всех строкtext свойство каждого ярлыка.

Это также эквивалентно следующему:

(labels as AnyObject).valueForKey("text")

... так же, как в Objective-C :)

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