2015-05-13 3 views
0

Я объявляю переменные как внутри, так и снаружи класса, как показано ниже. Мое понимание ООП заключается в ограничении их объема. Однако, чтобы использовать их в других классах/файлах, я помещаю их снаружи (например, «testLabel»). В основном потому, что он «работает», и я недостаточно хорошо знаком с ООП, чтобы сделать иначе.Где переменные должны быть объявлены в Swift

var testlabel:UILabel! 
public var earth = SKShapeNode(circleOfRadius: 15) 

class GameScene: SKScene , SKPhysicsContactDelegate {   
var startTime = NSTimeInterval() 
var skView:SKView! 

Мой вопрос: что лучше всего использовать в Swift/OOP, чтобы сделать переменные доступными для всех классов?

Я прочитал несколько обсуждений, но до сих пор неясно, насколько опасны (по сравнению с удобством) объявления переменных публично или глобально.

Благодарим за помощь.

+0

см, Вы можете использовать имя переменной в ALL класса, где вы хотите использовать. –

+0

@DharmeshDhorajiya - это не то, для чего предназначен appdelegate. Просто потому, что это удобное место, доступное для всех классов, не означает, что вы должны использовать его для глобальных переменных. –

ответ

3

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

Я не уверен, есть ли какие-либо опасности, если объявить глобальными переменными.

1

«Опасности» объявления глобальных переменных скорее напоминают «запахи кода» или плохую практику. Они не опасны тем, что они приведут к сбою вашего кода, но они опасны тем, что они приводят к тому, что ваш код становится более громоздким и более сложным в обслуживании, поскольку ваши классы не аккуратно инкапсулированы, а некоторые из их функциональных возможностей мест.

Иногда требуется глобальное поведение. В этом случае, я думаю, вы должны сделать общий экземпляр или одноэлемент какого-либо класса, который могут ссылаться на все другие классы. Затем, вместо наличия волшебных плавающих переменных, вы, по крайней мере, инкапсулируете это поведение в один класс, который легко найти и контролировать. Apple использует общие экземпляры всего своего кода.

http://www.raywenderlich.com/86477/introducing-ios-design-patterns-in-swift-part-1

https://thatthinginswift.com/singletons/

+0

Спасибо за информацию. У меня есть простое приложение, но я все равно хочу придерживаться/понимать лучшую практику. Пока я буду использовать глобальные переменные, в то время как я изучаю одиночные игры, инкапсуляцию и т. Д. – AMC08

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