2015-04-15 1 views
1

Я понимаю, что это ненужный вопрос, но ... почему я не могу использовать сокращение для преобразования массива символов в строку?swift: невозможно уменьшить массив символов [sic] до строки

например,

let str = "this is a string" 
let clist = Array(str) 
let slist = clist.reduce("", +) 

дает мне: 'Характер' не является подтипом 'Uint8' когда

list dlist = [0, 1, 2, 3, 4, 5, 6] 
let sum = dlist.reduce(0, +) 

работы

Я знаю, что могу просто сделать SLIST = строка (клист), но я просто хочу знать, ты знаешь?

Swift 1.1 в игровой площадке Xcode 6,2

Спасибо!

ответ

2

Внутри combine: закрытия

let slist = clist.reduce("", +) 
  • $0 является так далеко накопленным результат - String,
  • $1 является текущим элементом из clist - это Character.

Оператор + не принимает в качестве аргументов (String, Character).

Это будет работать:

let slist = clist.reduce("") { $0 + String($1) } 
1

В Swift 1.2:

let str = "this is a string" 
let clist = Array(str) 
let slist = clist.map { String($0) }.reduce("", combine: { $0 + $1 }) 
println(slist) // "this is a string" 
Смежные вопросы