Это отличный вопрос, и хотя Крис Лэттнер намеренно не хочет поддерживать эту функцию, я, как и многие разработчики, также не могу отпустить мои чувства, исходящие с других языков, где это тривиальная задача. Существует множество примеров unsafeBitCast
, большинство из которых не показывают полную картину, здесь более подробный :
typealias SwfBlock = () -> ()
typealias ObjBlock = @convention(block) () -> ()
func testSwfBlock(a: SwfBlock, _ b: SwfBlock) -> String {
let objA = unsafeBitCast(a as ObjBlock, AnyObject.self)
let objB = unsafeBitCast(b as ObjBlock, AnyObject.self)
return "a is ObjBlock: \(a is ObjBlock), b is ObjBlock: \(b is ObjBlock), objA === objB: \(objA === objB)"
}
func testObjBlock(a: ObjBlock, _ b: ObjBlock) -> String {
let objA = unsafeBitCast(a, AnyObject.self)
let objB = unsafeBitCast(b, AnyObject.self)
return "a is ObjBlock: \(a is ObjBlock), b is ObjBlock: \(b is ObjBlock), objA === objB: \(objA === objB)"
}
func testAnyBlock(a: Any?, _ b: Any?) -> String {
if !(a is ObjBlock) || !(b is ObjBlock) {
return "a nor b are ObjBlock, they are not equal"
}
let objA = unsafeBitCast(a as! ObjBlock, AnyObject.self)
let objB = unsafeBitCast(b as! ObjBlock, AnyObject.self)
return "a is ObjBlock: \(a is ObjBlock), b is ObjBlock: \(b is ObjBlock), objA === objB: \(objA === objB)"
}
class Foo
{
lazy var swfBlock: ObjBlock = self.swf
func swf() { print("swf") }
@objc func obj() { print("obj") }
}
let swfBlock: SwfBlock = { print("swf") }
let objBlock: ObjBlock = { print("obj") }
let foo: Foo = Foo()
print(testSwfBlock(swfBlock, swfBlock)) // a is ObjBlock: false, b is ObjBlock: false, objA === objB: false
print(testSwfBlock(objBlock, objBlock)) // a is ObjBlock: false, b is ObjBlock: false, objA === objB: false
print(testObjBlock(swfBlock, swfBlock)) // a is ObjBlock: true, b is ObjBlock: true, objA === objB: false
print(testObjBlock(objBlock, objBlock)) // a is ObjBlock: true, b is ObjBlock: true, objA === objB: true
print(testAnyBlock(swfBlock, swfBlock)) // a nor b are ObjBlock, they are not equal
print(testAnyBlock(objBlock, objBlock)) // a is ObjBlock: true, b is ObjBlock: true, objA === objB: true
print(testObjBlock(foo.swf, foo.swf)) // a is ObjBlock: true, b is ObjBlock: true, objA === objB: false
print(testSwfBlock(foo.obj, foo.obj)) // a is ObjBlock: false, b is ObjBlock: false, objA === objB: false
print(testAnyBlock(foo.swf, foo.swf)) // a nor b are ObjBlock, they are not equal
print(testAnyBlock(foo.swfBlock, foo.swfBlock)) // a is ObjBlock: true, b is ObjBlock: true, objA === objB: true
. Интересная часть заключается в том, как быстро бросает SwfBlock в ObjBlock, но на самом деле два литых блока SwfBlock всегда будут разных значений, а ObjBlocks - нет. Когда мы бросаем ObjBlock в SwfBlock, то же самое происходит с ними, они становятся двумя разными значениями. Поэтому, чтобы сохранить ссылку, этого рода литье следует избегать.
Я все еще понимаю весь этот предмет, но одна вещь, о которой я мечтал, - это способность использовать @convention(block)
для класса / поэтому я подал запрос функции , который нуждается в голосовании или объяснении, почему это плохая идея. Я также понимаю, что этот подход может быть плохим все вместе, если это так, может кто-нибудь объяснить, почему?
ColorSchemer предложит хорошие схемы Вас.
, Если Вы хотите испытать что-то самостоятельно, попробуйте Цветовые комбинации .
Для цветовых схем мне нравится просматривать Цветные Любители . Существуют тысячи отправленных пользователями цветовых схем для выбора через для идей, и можно легко создать собственную схему, если Вы хотели бы. Много времен, я использую его просто, чтобы цветовая палитра создала просто правильный цвет (это производит цвет в шестнадцатеричном числе, RGB, HSV и CMYK).
Я использовал этот свободный цветной интриган , чтобы помочь мне определить некоторые хорошие разметки. Вы даете ему основной цвет, и это даст Вам много дополнений.
РЕДАКТИРОВАНИЕ: Gah! Прокляните Вас jko и Ваши богоподобные способности к вводу! По крайней мере, у нас есть та же ссылка все же. 8^D
Это не комбинации на - говорят, но хорошие цвета, если Вы просто надеетесь копировать что-то (или если Вы похожи на меня и имеете цветной смысл летучей мыши).
Что касается того, когда я действительно использую текущие палитры, которые я использую Colourlovers, kuler и Colourschemer с собственными цветами.
Мои рисунки линиями выходят неправильно, но следующие ссылки сохранили меня мастерски выравниваемым много лет:
К web-2.0-ize это, просто поместите вспышку линзы на свой логотип & отметьте его БЕТА - Вы будете в порядке.
Я сказал бы, что использование правильной комбинации цветов удобно для пользователя. Удостоверьтесь своя координата цветов друг с другом, и необходимо быть в порядке.
инструмент А я использую много, kuler ( http://kuler.adobe.com ). Это поможет Вам выбрать цвета, которые работают хорошо друг с другом.
был загрузками исследования в области этого вида материала, и большая часть из него конфликтует, несколько хороших переходов от точек упоминаются выше.
Обычно более легкие фоны и хороший контраст одобрены всеми исследователями, но детали получают niggly.
Miles Burke составил список цветов, используемых в большинстве знаменитостей в этом мире Web 2.0.
Он также дает PNG или JPG как цвет cheatsheet.
я уверен, что могу дать Вам общее представление от того, что цвет к выбрал для Вашего приложения.
связь для "поиска цвета на boxesandarrows" разорвана. Я не уверен, как добраться, это для работы, не имея пользователя переходит к сайту и цвету шрифта в поле поиска.
@Chris
Ваш Поиск: цвет Привел к 186 результатам
, Хорошо работает для меня.
Нет никакого единственного набора цветов, которые все находят четким, но инструменты существуют, чтобы формализовать изменение и помочь Вам сделать информированный выбор. Любой делающий UI должен знать об автоматизированной проверке цвета доступность. Каждый раз, когда у Вас есть текст, который люди должны прочитать, вытолкать основные цвета и цвета фона в это;
Это основано на большом исследовании контраста и четкости. Если Ваша цветовая комбинация> 125, и> 500 Вы так в безопасности, как можно быть. Между 100 и 125 для различия в яркости и 400 и 500 для цветового различия тогда это прекрасно, но могло быть лучше. Ниже 100 и 400 соответственно, растущие числа людей испытают затруднения при чтении его по ряду причин.