Консенсус заключается в использовании словаря для этого - см. другие ответы. Это хорошая идея для большинства случаев, однако есть много аспектов, связанных с этим:
Тем не менее, я реализовал variable variables manager -класс, который предоставляет некоторые из вышеперечисленных идей. Он работает для python 2 и 3.
Вы использовали бы класс следующим образом:
from variableVariablesManager import VariableVariablesManager
myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])
# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
print("not allowed")
except AttributeError as e:
pass
# rename a variable
myVars.renameVariable('myconst', 'myconstOther')
# preserve locality
def testLocalVar():
myVars = VariableVariablesManager()
myVars['test'] = 13
print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])
# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
myVars = VariableVariablesManager()
print("inside function myVars['globalVar']:", myVars['globalVar'])
myVars['globalVar'] = 13
print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])
Если вы хотите разрешить переписывание переменных с помощью только тот же тип:
myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
myVars['test'] = 25
myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)
как работает UITableView? Создает ли он новые ячейки при первом запуске приложения?
blockquote>Да! Вот идея. Допустим, ваше табличное представление имеет 2000 строк. Но только 12 ячеек видны одновременно на экране. Итак, нужно создать только 12 ячеек (или, может быть, 13 или 14) за все время существования приложения!
И я действительно хочу знать, как и когда вызывается метод dequeueReusableCell [113 ] blockquote>
Вы называете это в начале
tableView(_:cellForRowAt:)
. Этот метод, в свою очередь, вызывается средой выполнения всякий раз, когда требуется ячейка, и вы получаете либо новую ячейку (начальные 12, 13 или 14 в моем примере выше), либо повторно используемую ячейку (все строки будут отображаться после этого), и вы возвращаете это для показа, и поэтому все в порядке с миром.