2015-03-03 5 views
0

Я знаю, почему я бы использовал структуру в отличие от класса, но как я могу лучше сказать, что используется API, который я использую?Дифференциация между строкой и классом в Swift

Очевидно, что просмотр заголовочного файла (или, надеюсь, документации) должен сделать это сразу же очевидным. Мне интересно, есть ли способ узнать, является ли объект, который я использую, структурой или классом по номиналу?

ответ

0

я не уверен, что вы подразумеваете под «номинальной стоимости». Вы можете проверить, чтобы увидеть, если объект является экземпляром класса, получив это MirrorType с помощью reflect и проверки для MirrorType «s objectIdentifier собственности, как это:

struct TestStruct { } 
class TestClass { } 

let testStruct = TestStruct() 
let testClass = TestClass() 

if let x = reflect(testStruct).objectIdentifier { 
    println("I am a class...") 
} else { 
    println("I am not a class...") // prints "I am not a class..." 
} 

if let x = reflect(testClass).objectIdentifier { 
    println("I am a class...")  // prints "I am a class..." 
} else { 
    println("I am not a class...") 
} 

Этот ответ может быть устаревшей с предстоящим выпуском Swift 1.2 (у меня нет новой бета-версии xCode, поэтому я не могу сказать наверняка), который, как я понимаю, имеет лучшую объектную интроспекцию, но это делает трюк.

0

Вы не можете наследовать другие структуры или типы. Классы имеют возможность наследовать функции, переменные и константы из родительских классов.

В быстрых структурах представлены типы значений, а классы - ссылочные типы. Работа со значениями типов может сделать ваш код менее подверженным ошибкам.

Когда вы делаете копию переменной ссылочного типа, обе переменные ссылаются на один и тот же объект в памяти. Изменение одной из переменных изменит другую.

Когда вы делаете копию переменной типа значения, полная переменная копируется в новое место в памяти. Изменение одной из копий не изменит другую. Если копирование объекта дешево, гораздо проще сделать копию, чем обменяться памятью.

Смежные вопросы