求教贴,一个可能很白痴的问题,有时间又很闲的大神给解决下

http://tieba.baidu.com/p/3546280977

非常感激,截图如下,可能非常简单,也可能是非常弱智的问题,但还是希望有大神能鄙视的帮我解答一下!新手!


 
 
手机党,看不清


收起回复
  • 2楼
  • 2015-01-24 13:35
 
  • PCatZJ是看不清还是没有
    2015-1-24 14:31回复
  • ann2bad_lego回复 PCatZJ :没有啥
    2015-1-24 14:45回复
  • PCatZJ回复 ann2bad_lego :没有图片啊!应该是看不清,那等等,我把文字贴楼下!
    2015-1-24 14:48回复
  • ann2bad_lego回复 PCatZJ :把错误信息也贴一下
    2015-1-24 14:54回复
  • PCatZJ回复 ann2bad_lego :错误信息在3楼,我再贴程序,其实是一个非常简单的闭包,我几乎是照着书上抄的,还是有错误!
    2015-1-24 14:56回复
  • 我也说一句
 
 
 
 
提示的两个错误分别是:
cannot invoke 'sort' with an argument list of type'([String],(String, String) -> Bool)'

invalid character in source file


 
 
 
这是源程序:
import Foundation


let arr = ["hello", "world", "hello2", "233","2world"]


func compare(s1: String, s2: String) -> Bool {
return s1 > s2
}




var arr2 = sort(arr, {(s1: String, s2: String) -> Bool in return s1 > s2})


收起回复
  • 4楼
  • 2015-01-24 15:04
 
  • PCatZJ不对,最后一句是var arr2 = sort(arr, compare),上面的最后一句是不需要那个compare函数,但是也不行,应该是类型转换哪个地方的问题
    2015-1-24 15:06回复
  • y5254y回复 PCatZJ :跳到8楼看看我说的,你就明白了
    2015-1-24 21:01回复
  • 我也说一句
 
 
 
sort没有接受这两个类型参数的重载函数。。。你是要用sorted吧?


收起回复
  • 5楼
  • 2015-01-24 15:06
 
 
 
 
xcode的help里就有,也可以按住command键,然后哪里不会点哪里


 
世界那么大,我想去看看,哪里凉快选哪里! 立即查看 
 
var arr = ["hello", "world", "hello2", "233","2world"]


func compare(s1: String, s2: String) -> Bool {
return s1 > s2
}




sort(&arr, {(s1: String, s2: String) -> Bool in return s1 > s2})


 
 
文档翻译的有问题,最好对比着英文的看看,特别是代码部分。
英文文档里用的不是sort是sorted。这两个函数功能一样,用法不一样,sort没有返回值,第一个参数是inout的,所以第一个参数同时就是返回值;sorted是将排序好的放在了返回值。




你如果用sorted的话,就直接把你代码里的sort换成sorted就可以了。
如果想用sort的话,就是楼上说的那样。


收起回复
  • 8楼
  • 2015-01-24 21:00
 
  • PCatZJ谢谢,受教!
    2015-1-24 21:04回复
  • ann2bad_lego回复 PCatZJ :再对层主补充一点,用sort排序是将排好的结果放在原有的数组里,所以数组不能用let声明为常量。而sorted是将排好的结果作为返回值,你可以用一个新的变量或常量来接收,这时候原来的数组是变量或者常量就无所谓了
    2015-1-24 22:50回复
  • PCatZJ回复 ann2bad_lego :受教!!!感激不尽!!!
    2015-1-24 22:53回复
  • 我也说一句
 
 
 
原文地址:https://www.cnblogs.com/xuejinhui/p/4618185.html