2016-09-20 2 views
0

У меня очень простой проект. Это инструмент командной строки, написанный на Swift 3.0 с использованием Xcode 8.0. Эта программа:Swift 3.0 Использование неразрешенного идентификатора

import Foundation 

func aaa() { 
    print(a) 
} 

let a = "a" 

aaa() 

Это работает отлично и печать «а» в консоли, но позволяет сделать эту программу более сложной:

import Foundation 

func aaa() { 
    print(a) 
    print(b) 
} 

let a = "a" 
let b = "b" 

aaa() 

И линия

print(b) 

отмечен с ошибкой

Use of unresolved identifier 'b'

Мы можем сделать еще проще:

import Foundation 

func aaa() { 
    print(a) 
} 

aaa() 

let a = "a" 

И снова, линия

print(a) 

отмечена ошибка

Use of unresolved identifier 'a'

Я не новичок, и я undertand, что я могу легко исправить эту ошибку например, положить все переменные в начале программы. Вопрос: почему это происходит? Я думал, что каждый файл с расширением .swift, это класс, и я могу поместить переменную и функции, вызвать функции в любом порядке (все переменные и константы будут глобальными) ... И последнее, у меня нет способности чтобы проверить это на Swift 2.2, но я не помню, что раньше я сталкивался с этой ошибкой, так что это может быть ошибка компилятора Swift 3.0? Спасибо за любой ответ!

ответ

0

Это, как представляется, Swift ошибка компилятора:

Когда я тестировал его с другими переменными:

enter image description here

Он всегда пропускает первый вопрос и отвечает на второй переменной, в первую очередь.

Вообще, если хотел доступ к переменной, которая находится внутри функции, и хотел сделать какие-либо действия с такой переменной, она должна быть объявлена ​​там.

Я буду следовать этому соглашению всюду.

+0

Благодарим вас за ответ. Как вы думаете, как мы должны сообщать об этом Apple? – Alex

+0

Да, почему бы и нет? Если вам повезет, и если они ответят вам с другим объяснением, не забудьте поделиться им здесь :) – pedrouan

+0

Я буду, но мне нужно некоторое время для этого ... – Alex

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