1 votos

El resultado de "elegir de la lista" nunca es igual a una cadena

Estoy tratando de hacer un pequeño scriptlet para mostrar fácilmente en un formato de copiar/pegar, las direcciones de mis cripto carteras. Sin embargo estoy teniendo problemas con el uso correcto de "elegir de la lista". El error que obtengo es "La variable pasteThis no está definida", mi código está abajo, las direcciones de criptografía redactadas por razones obvias.

on run
    set walletChoices to {"ETH", "DOGE", "XMR", "BTC"}
    set whichWallet to choose from list walletChoices with prompt "Which wallet do you need?" default items {"ETH"}
    if whichWallet is "ETH" then
        set walletExpanded to "Ether"
        set pasteThis to "ethAddr"
    else if whichWallet is "XMR" then
        set walletExpanded to "Monero"
        set pasteThis to "xmrAddr"
    else if whichWallet is "DOGE" then
        set walletExpanded to "Dogecoin"
        set pasteThis to "dogeAddr"
    else if whichWallet is "BTC" then
        set walletExpanded to "Bitcoin"
        set pasteThis to "btcAddr"
    end if
    display dialog "Here's your " & whichWallet & " wallet, as requested!" default answer pasteThis buttons {"OK"} default button "OK"
end run

¿Puede alguien decirme qué estoy haciendo mal y cómo usar esto correctamente?

3voto

user3439894 Puntos 5883

Desde elegir de la lista en el Guía del lenguaje AppleScript :

Resultado
Si el usuario hace clic en el botón OK, devuelve un lista de los elegidos número y/o texto elementos; si se permite la selección vacía y no se selecciona nada, devuelve una lista vacía ({}). Si el usuario hace clic en el botón Cancelar, devuelve false .

Así, en su if declaración , if whichWallet is "ETH" then El "ETH" etcétera es texto no es un lista , {"ETH"} y por qué set pasteThis to ... nunca ocurre.

Cualquiera de las dos pruebas contra un lista , elemento de la lista o coaccionar lo que se devuelve por choose from list a texto .

Si te cambias:

set whichWallet to choose from list walletChoices with prompt "Which wallet do you need?" default items {"ETH"}

Para:

set whichWallet to (choose from list walletChoices with prompt "Which wallet do you need?" default items {"ETH"}) as text

Entonces el resto de la código como está codificado, funcionará.

De lo contrario, puede utilizar el ejemplo que se muestra en el elija de la lista enlace .

O puede probar contra un lista :

Cambios:

if whichWallet is "ETH" then

Para:

if whichWallet is {"ETH"} then

Haciendo lo mismo con el resto de lista de artículos en el else if whichWallet is ... declaraciones .

Notas:

Los cambios mencionados en este documento funcionan con el cambia a la código de la pregunta como la choose from list comando por defecto no permite selecciones múltiples y multiple selections allowed true no se ha incluido como parte del choose from list comando .

Basado en lo que parece que el OP está tratando de hacer, esto no es un problema, sin embargo, lo menciono porque si se implementó entonces un enfoque diferente tendría que ser utilizado tratando con múltiples lista de artículos devuelto en el lista . Es decir, habría que bucle a través de la lista devuelto y actuar en cada elemento de la lista .

0voto

varEStableGnus Puntos 19

Reemplazar todo if whichWallet is con if whichWallet contains

Si planea coaccionar la lista devuelta desde su indicador a una cadena, este cambio debería ser resistente a las opciones de lista múltiples que se concatenan en un solo texto (si permitió múltiples selecciones, es decir).

El problema con este método es que, dado que las opciones coaccionadas en el texto podrían crear una cadena que contenga una opción que nunca fue seleccionada por el usuario como resultado de la concatenación, se vuelve sensible al orden de sus declaraciones y a si lo codifica para detenerse o continuar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X