Входная функция Ошибка имени [дубликат]

Как и в Используя «self» в функциях расширения класса в Swift , вы можете определить общий вспомогательный метод, который определяет тип «я» из вызывающего контекста:

extension UIViewController
{
    class func instantiateFromStoryboard(storyboardName: String, storyboardId: String) -> Self
    {
        return instantiateFromStoryboardHelper(storyboardName, storyboardId: storyboardId)
    }

    private class func instantiateFromStoryboardHelper(storyboardName: String, storyboardId: String) -> T
    {
        let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
        let controller = storyboard.instantiateViewControllerWithIdentifier(storyboardId) as! T
        return controller
    }
}

Затем компилируется

let vc = MyViewController.instantiateFromStoryboard("name", storyboardId: "id")

, и тип выводится как MyViewController.


Обновление для Swift 3:

extension UIViewController
{
    class func instantiateFromStoryboard(storyboardName: String, storyboardId: String) -> Self
    {
        return instantiateFromStoryboardHelper(storyboardName: storyboardName, storyboardId: storyboardId)
    }

    private class func instantiateFromStoryboardHelper(storyboardName: String, storyboardId: String) -> T
    {
        let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: storyboardId) as! T
        return controller
    }
}

Другое возможное решение, использующее unsafeDowncast:

extension UIViewController
{
    class func instantiateFromStoryboard(storyboardName: String, storyboardId: String) -> Self
    {
        let storyboard = UIStoryboard(name: storyboardName, bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: storyboardId)
        return unsafeDowncast(controller, to: self)
    }
}

143
задан martineau 12 October 2016 в 13:40
поделиться

9 ответов

Вы можете изменить, какой питон вы используете с вашей IDE, если вы уже загрузили python 3.x, его не должно быть слишком сложно переключить. Но ваш скрипт отлично работает на python 3.x, я просто изменил бы

print ("your name is" + input_variable)

на

print ("your name is", input_variable)

. Поскольку в запятой он печатает с пробелом между your name is и независимо от введенного пользователем. И: если вы используете 2.7, просто используйте raw_input вместо ввода.

0
ответ дан Adil B 20 August 2018 в 06:51
поделиться

Для всех, кто может столкнуться с этой проблемой, выясняется, что даже если вы включили #!/usr/bin/env python3 в начало вашего скрипта, shebang игнорируется, если файл не является исполняемым.

To определите, является ли ваш файл исполняемым:

  • запустите ./filename.py из командной строки
  • , если вы получите -bash: ./filename.py: Permission denied, запустите chmod a+x filename.py
  • снова запустить ./filename.py

Если вы включили import sys; print(sys.version), как предложил Кевин, теперь вы увидите, что скрипт интерпретируется python3

2
ответ дан automonous 20 August 2018 в 06:51
поделиться

Вы можете либо сделать:

x = raw_input("enter your name")
print "your name is %s " % x

, либо:

x = str(input("enter your name"))
print "your name is %s" % x
214
ответ дан Community 20 August 2018 в 06:51
поделиться
  • 1
    Я знаю, что этот вопрос является дублером, поэтому здесь так мало голосов, но это фантастический ответ. Вы объясняете теорию, даете практический пример того, что мы, возможно, не подумали о новинках, и дадим простое решение. Спасибо. – PopularIsn'tRight 6 November 2014 в 04:03
  • 2
    raw_input исправил проблему для меня – Spencer Goff 8 December 2017 в 18:14
  • 3

Вы используете Python 2, а не Python 3. Для этого в Python 2 используйте raw_input.

input_variable = raw_input ("Enter your name: ")
print ("your name is" + input_variable)
36
ответ дан davidism 20 August 2018 в 06:51
поделиться

input_variable = input («Введите ваше имя:») print («ваше имя« + input_variable »)

u необходимо вводить ввод в виде одиночных или двойных qoutes

0
ответ дан Parminder Singh 20 August 2018 в 06:51
поделиться

Для python 3 и выше

s = raw_input ()

он решит проблему на IDE pycharm, если вы решаете на онлайн-сайте точно hackerrank, а затем используйте:

s = input()
2
ответ дан RAHUL KUMAR 20 August 2018 в 06:51
поделиться

вы должны использовать raw_input, потому что используете python-2.7. Когда вы используете input () для примера переменной: s = input ('Name:'), он выполнит команду ON Python Environement Without Saving. Что вы написали на переменной (-ах) и создании ошибки Если то, что вы написали, не определено, значит, вы можете использовать raw_input (), он правильно сохранит то, что вы написали в переменной, например: f = raw_input ('Name:') и он не выполнит его в среде python без создания любой возможной ошибки

input_variable = raw_input('Enter Your Name : ')
print("Your Name Is  : " + (input_variable))
4
ответ дан Skiller Dz 20 August 2018 в 06:51
поделиться
  • 1
    Благодарим вас за этот фрагмент кода, который может предоставить некоторую ограниченную немедленную помощь. Правильное объяснение значительно улучшит его долгосрочную ценность, показывая, почему это является хорошим решением проблемы и сделает его более полезным для будущих читателей с другими аналогичными вопросами. Измените свой ответ, чтобы добавить какое-то объяснение, включая сделанные вами предположения. – Maximilian Peters 6 May 2018 в 21:14
  • 2
    Многие из тех, кто был связан с этим сообщением, не объяснили и предположения Итак, зачем мне это нужно? когда вы используете input () в Python 2.7, он будет применять Automotquly то, что вы написали на терминале, оно не будет сохранять его на вашей переменной, но raw_input сохранит его, exampe f = input ('Name:'), там он будет выполнять команду на environement непосредственно с созданием ошибки, если то, что вы выбрали, не определено, но f = raw_input ('Name:'), raw_input сохранит то, что вы написали на переменной f, и не будет исполнено, а не как вход ( ), которые являются моим объяснением – Skiller Dz 6 May 2018 в 21:37
  • 3
    Спасибо, что добавили объяснение в ответ! Копирование и вставка могут быть краткосрочным решением, объяснения делают сайт полезным. – Maximilian Peters 6 May 2018 в 21:45

Поскольку вы пишете для Python 3.x, вы хотите начать свой скрипт с помощью:

#!/usr/bin/env python3

Если вы используете:

#!/usr/bin/env python

По умолчанию к Python 2.x. Они идут в первой строке вашего скрипта, если нет ничего, что начинается с #! (ака shebang).

Если ваши скрипты начинаются с:

#! python

Затем вы можете изменить его на:

#! python3

. Хотя это более короткое форматирование распознается только несколькими программами, такими как пусковая установка, поэтому это не лучший выбор.

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

8
ответ дан Zim 20 August 2018 в 06:51
поделиться
221
ответ дан Community 31 October 2018 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: