自从我触及AppleScript以来已经有很长一段时间了,所以这可能就是我不做正确的事情。我有一个列表,我通过收集路径中的第二个文本项来创建。路径看起来像这样:
高清:用户:xxxxxxxx:图书馆:开发商:Xcode:档案:2017-06-14:焦点6-14-17,8.03 AM.xcarchive:"
所以列表中填充的字符串看起来像这样:focus 6-14-17,8.03 AM.xcarchive
然后我向用户呈现并要求他们选择存档。我有另一个包含所有存档路径的列表。我要做的是获取选定的存档,在存档名称列表中找到它的索引,然后从存档路径列表中提取路径。非常直接,至少我想。代码的相关部分如下所示:
@Produces("application/json")
我从来没有得到过匹配,即使我只是重复通过存档名称列表并使用日志语句我可以得到我正在寻找的结果:
set myFile to choose from list archiveFileNames with prompt "Select An Archive"
-->return class of myFile
repeat with i from 1 to count of every item of archiveFileNames
if (myFile is equal to (item i of archiveFileNames as string)) then
log myFile & "::" & item i of archiveFileNames & "::" & i
end if
end repeat
(参见比赛的最后结果)
log myFile & "::" & item i of archiveFileNames & "::" & i
所以我认为这必须是一个类/类型问题,因为我正在比较苹果和橙子。当我运行它并且 - >返回myFile的类没有注释时,我得到列表中我选择的类是一个列表。
显然我做错了什么。我期待类型是字符串,也许是文本,而不是列表。帮助我Obi Wans,你是我唯一的希望! :d
编辑:好的,如果我将条件更改为:
if(myFile等于(archiveFileNames的项目i为列表))然后
我得到了预期的结果。但我仍然感到困惑的是为什么从字符串列表中选择的对象类型是一个列表。
答案 0 :(得分:1)
出现此问题是因为choose from list
始终返回列表对象(如果用户按取消),则返回布尔值false
。
你必须压扁列表。
set myFile to choose from list archiveFileNames with prompt "Select An Archive"
if myFile is false then return
set myFile to item 1 of myFile
repeat with i from 1 to count of every item of archiveFileNames
set currentItem to item i of archiveFileNames
if myFile = currentItem then
log myFile & "::" & currentItem & "::" & i
end if
end repeat
答案 1 :(得分:0)
尝试使用附加组件
更改类型as text
所以不要比较
if A is B
对于不同的类可能会失败 - 强制执行文本
if (A as text) is (B as text)
另外,这里有一个处理程序来获取列表中的项目位置
on list_position(this_item, this_list)
repeat with i from 1 to the count of this_list
if ((item i of this_list) as text) is (this_item as text) then return i
end repeat
return 0
end list_position
编辑:澄清您的列表问题,请说明您如何创建列表