Похоже, что вы отсутствуете, включая IOBluetooth.framework в своем проекте. Вы можете добавить его по:
-Нажмите на свой проект в левом верхнем углу левой панели (синий значок).
. На средней панели щелкните вкладку «Фазы построения».
-Включить «Связывание двоичных файлов с библиотеками», нажмите кнопку «плюс».
-Закройте IOBluetooth.framework из списка и нажмите Добавить.
[/g0]
[/g1]
Это позволит убедиться, что определения IOBluetooth.framework найдены компоновщиком , Вы можете видеть, что фреймворк является членом вашей цели, щелкнув фреймворк в левой панели и увидев целевое членство структуры в правой панели (обратите внимание, что я переместил структуру в группе Frameworks для целей организации):
[/g2]
protocol A : class { ... }
определяет «протокол только для класса» : Только этот тип классов (а не структуры или перечисления) может принимать этот протокол.
Слабые ссылки определены только для ссылочные типы . Классы являются ссылочными типами, структурами и перечислениями являются типы значений. (Закрытия также являются ссылочными типами, но замыкания не могут принимать протокол, поэтому в этом контексте они неактуальны.) Поэтому, если ваш протокол определяет слабое свойство, тогда протокол должен быть протоколом только для классов.
Вот еще один пример, который требует только для протокола:
protocol A {
var name : String { get set }
}
func foo(a : A) {
a.name = "bar" // error: cannot assign to property: 'a' is a 'let' constant
}
Это не скомпилируется, потому что для экземпляров структур и перечислений a.name = "bar"
является мутацией a
. Если вы определяете протокол как
protocol A : class {
var name : String { get set }
}
, то компилятор знает, что a
является экземпляром типа класса, к которому a
является ссылкой на хранилище объектов, а a.name = "bar"
изменяет ссылающийся на объект, но не a
.
Как правило, вы должны определить протокол только для классов, если вам нужны типы, принимающие протокол как ссылочные типы, а не типы значений.
Вы можете сделать протокол полученным из любого типа класса, такого как NSObject или AnyObject. например:
protocol TopNewsTableDelegate : AnyObject{
func topNewsTableDidLoadedStories()
}
'a' is a 'let' constant
. Я немного запутался. Что делает здесьa
константу? – Suragch 2 January 2016 в 11:07a
вfunc foo(a : A)
- по умолчанию константы i>. – Martin R 2 January 2016 в 11:37