2015-11-23 2 views
1

С уведомлениями я не могу превышать 256 символов. Мне нужно изменить размер строки до 200 символов.Изменить размер строки в Swift

Как я могу, например, если у меня есть строка из 210 символов, измените ее размер до 197, а остальные «...». Но если у меня есть одна строка из 100 символов, не изменяйте ее размер, потому что она соответствует уведомлению.

Спасибо.

ответ

0
let str = "With notifications I can't exceed more than 256 characters. I need to resize a string to be 200 characters maximum. How could I, for example if I have an string of 210 characters, resize it to 197 and the rest \"...\". But if I have one string of 100 characters, don't resize it because it fits in the notification." 

func foo(str: String, width: Int)->String { 
    let length = str.characters.count 
    if length > width { 
     let d = length - width + 3 
     let n = d < 0 ? 0 : d 
     let head = str.characters.dropLast(n) 
     return String(head) + "..." 
    } 
    return str 
} 

foo(str, width: 10) // "With no..." 
print(foo(str, width: 200)) 
/* 
With notifications I can't exceed more than 256 characters. I need to resize a string to be 200 characters maximum. How could I, for example if I have an string of 210 characters, resize it to 197 ... 
*/ 
2

Я предполагаю, что вы в порядке с добавлением эллипсиса в конце строки. В этом случае, если ваша строка превышает 200 символов, вам нужно взять подстроку, которая идет от первого символа (индекс: 0) до 197-го. Затем вы соединяете «...» с этой подстрокой и используете ее в своем уведомлении.

Есть еще одна возможность, которую я использовал в прошлом: когда вы создаете уведомление, вы сжимаете свое сообщение с алгоритмом come (я использовал простой старый huffman) и отправляю сжатую версию в качестве полезной нагрузки. В вашем приложении вы раздуваете сжатое сообщение и показываете его, что практически превышает ограничение по размеру. Само собой разумеется, что это работает до тех пор, пока сжатая версия вписывается в полезную нагрузку уведомления. Если вы не можете этого сделать, вам придется сделать ваше сообщение короче заранее - либо с помощью метода, описанного выше, и затем отправить его в виде обычного текста, либо вы будете работать дольше, чем сможете усечь свое сообщение, прежде чем сжимать его что дефлированная версия помещается внутри полезной нагрузки.

+0

ДАВАЙТЕ имеют следующую строку: var data = "Это строка не так долго". Мне нужно, чтобы оно составляло не более 10 символов, а затем «...» Как код с подстрокой в ​​Swift? –

+0

Если у вас есть ограничение на n символов, вам нужно проверить, является ли ваш ввод длиннее. Если это так, то возьмите первые n - 3 символа (в этом случае 7) и добавьте «...» к ним, чтобы иметь 10-символьную строку. –

2

Я бы использовал это расширение для String. Обратите внимание, что он не делает именно то, что вы хотите, так как он использует юникод многоточие символа вместо 3-х периодов, но с указанием «...» как второй аргумент будет сделать это: изображение I

extension String { 
    func ellide(length:Int, ellipsis:String = "…") -> String { 
     if characters.count > length { 
      return self[startIndex..<startIndex.advancedBy(length - ellipsis.characters.count)] + ellipsis 
     } else { 
      return self 
     } 
    } 
} 
+1

Также обратите внимание, что это ответ на более буквальную версию вашего вопроса о «символах», когда вас больше интересует количество байтов сообщения, которое становится важным отличием, если вы имеете дело с символами, отличными от ASCII. –

Смежные вопросы