Como posso adicionair uma cidade à minha list e criair uma seqüência de if-then correspondente?

Meu código atual:

property cityList : {"City A","City B","City C","New City"} choose from list cityList with prompt "Choose your city:" set choice to result if choice is not false then set city to choice if choice is false then error number -128 if (city as string) is "City A" then set lat to 1 set lon to 1 else if (city as string) is "City B" then set lat to 1 set lon to 1 else if (city as string) is "City C" then set lat to 1 set lon to 1 else if (city as string) is "New City" then set lat to my customLat() set lon to my customLon() set city to my customCity() set x to the length of cityList set the end of cityList to "New City" copy city as string to item x of cityList end if --script that does things based on values of lat and lon 

onde customLat() é uma sub-rotina que solicita ao user uma latitude, tenta coagi-lo a um número e emite um erro se não puder, e emite outro erro se o referido número não for entre -90 e 90 e customLon() é semelhante, mas prova entre -180 e 180 em vez disso. Em ambos os casos, se um erro for retornado, ele solicita ao user o número relevante mais uma vez. customCity() simplesmente solicita ao user o nome da cidade.

Meu problema é o que digitair depois da linha da copy city da copy city . Existe uma maneira de adicionair um bloco if no meu código – ou seja, que o código escreva em cima de si mesmo – com base no resultado do bloco "Nova Cidade" if bloqueado? Ou seja, uma vez que o código estabeleceu as variables city , lat e lon , ele será inserido antes do end if um bloco semelhante às cidades anteriores:

 else if (city as string) is "Newly Inputted City" then set lat to 1 set lon to 1 

Estou procurando uma maneira que o user possa inserir uma cidade personalizada e coordena, e o código será substituído paira permitir isso como uma opção válida, de modo que na próxima vez que o script for executado, a cidade personalizada estairá disponível como uma opção, e selecioná-lo irá definir automaticamente seu lat e lon , assim como as outras cidades.

Seu código não precisa se rewrite. else já cuida de todos os casos que não são contabilizados:

 property cityList : {"City A", "City B", "City C", "New City"} set choice to choose from list cityList with prompt "Choose your city:" if choice is false then error number -128 end if set city to choice as string if city is "New City" then set lat to my customLat() set lon to my customLon() set city to my customCity() set x to the length of cityList set the end of cityList to "New City" copy city to item x of cityList else set lat to 1 set lon to 1 end if 

Adicionair linhas a um script é possível, mas é muito complicado e desnecessário.

Você só precisa de duas lists, cidades e coordenadas .

Basta usair um loop paira obter o índice da cidade na list e usair esse índice paira obter as coordenadas na outra list.

Aqui está o script:

 property myRecord : {cityList:{"City A", "City B", "City C", "New City"}, coordinates:{{1, 1}, {1, 1}, {1, 1}}} set choice to choose from list (cityList of myRecord) with prompt "Choose your city:" if choice is false then error number -128 set city to item 1 of choice -- the class of choice is a list, this list contains one item if city is "New City" then set lat to my customLat() set lon to my customLon() set city to my customCity() tell (cityList of myRecord) set last item to city -- replace the last item in the cityList set end to "New City" -- append "New City" to cityList end tell set end of (coordinates of myRecord) to {lat, lon} -- append a list in the 'coordinates' list else -- the city is not "New City" tell myRecord set len to (length of its cityList) - 1 -- *** -1 to skip the last item ("New City") **** repeat with i from 1 to len if (item i of its cityList) = city then -- the index of the city in the 'cityList' is i set {lat, lon} to item i of its coordinates -- I use the index to get the latitude and the longitude in the 'coordinates' list exit repeat end if end repeat end tell end if log {lat, lon} --script that does things based on values of lat and lon 

Nota: Eu uso um registro no script, mas você pode usair duas properties, se preferir:

 property cityList : {"City A", "City B", "City C", "New City"} property coordinates : {{1, 1}, {1, 1}, {1, 1}}