2016-09-20 5 views
0

J'ai un projet très simple. C'est l'outil de ligne de commande écrit sur Swift 3.0 en utilisant Xcode 8.0. Ce programme est le suivant:Swift 3.0 Utilisation de l'identificateur non résolu

import Foundation 

func aaa() { 
    print(a) 
} 

let a = "a" 

aaa() 

Cela fonctionne parfaitement bien et impression "a" dans la console, mais permet de faire ce programme plus complexe:

import Foundation 

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

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

aaa() 

Et la ligne

print(b) 

est marqué avec erreur

Use of unresolved identifier 'b'

Nous pouvons faire encore plus facile:

import Foundation 

func aaa() { 
    print(a) 
} 

aaa() 

let a = "a" 

Et encore une fois, la ligne

print(a) 

est marqué par erreur

Use of unresolved identifier 'a'

Je ne suis pas novice et j'undertand que je peux facilement corriger cette erreur comme mettre toutes les variables au début du programme. La question est: pourquoi cela se passe-t-il? Je pensais que chaque fichier avec l'extension .swift, c'est une classe et je peux mettre des fonctions variables, appeler des fonctions dans n'importe quel ordre (toutes les variables et constantes seraient globales) ... Et une dernière chose, je n'ai pas de capacité pour tester cela sur Swift 2.2, mais je ne me souviens pas d'avoir déjà fait face à ce bug, alors peut-il s'agir d'une erreur du compilateur 3.0 de Swift? Merci pour votre réponse!

Répondre

0

Il semble être une erreur du compilateur Swift:

Quand je l'ai testé avec d'autres variables:

enter image description here

Il saute toujours la première question et est conforme à la deuxième variable, dans un premier temps.

En général, si voulu accéder à une variable, qui est dans une fonction, et je voulais faire une action avec une telle variable, il doit être déclaré il.

Je suivrais cette convention partout.

+0

Merci de votre réponse. Comment pensez-vous, devrions-nous signaler cela à Apple? – Alex

+0

Oui, pourquoi pas? Si vous êtes chanceux et s'ils vous répondent avec des explications différentes, n'oubliez pas de le partager ici :) – pedrouan

+0

Je le ferai, mais j'ai besoin de temps pour cela ... – Alex