通知我不能超過256個字符。我需要調整字符串的最大長度爲200個字符。在Swift中調整字符串的大小
我怎麼能,例如,如果我有一個210個字符的字符串,調整它的大小爲197和其餘「...」。但是,如果我有一個由100個字符組成的字符串,請不要調整它的大小,因爲它適合通知。
謝謝。
通知我不能超過256個字符。我需要調整字符串的最大長度爲200個字符。在Swift中調整字符串的大小
我怎麼能,例如,如果我有一個210個字符的字符串,調整它的大小爲197和其餘「...」。但是,如果我有一個由100個字符組成的字符串,請不要調整它的大小,因爲它適合通知。
謝謝。
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 ...
*/
我認爲你可以在字符串的末尾添加省略號。在這種情況下,如果您的字符串超過200個字符,則需要從第一個字符(索引:0)到第197個字符的子字符串。然後你將「...」連接到這個子字符串,並在你的通知中使用它。
我還有另外一種可能性:當你生成通知時,你使用come算法壓縮你的消息(我使用普通的舊的huffman),並將壓縮後的版本作爲有效載荷發送。在你的應用程序中,你膨脹了壓縮的消息並顯示它,因此實際上超過了大小限制。毫無疑問,只要壓縮版本適合通知有效載荷,就可以工作。如果你不能做到這一點,你必須事先縮短你的信息 - 無論是用上面描述的方法,然後用純文本發送出去,或者在壓縮之前制定最長的截短信息癟的版本適合在有效載荷內。
我會使用此擴展名字符串。需要注意的是,你想要什麼它不這樣做,因爲它使用Unicode省略號代替3個週期,但指定「......」作爲第二個參數會做到這一點:
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
}
}
}
另外請注意,當您可能對消息的字節數更感興趣時,這將回答關於「字符」的問題的更多字面版本,如果處理非ASCII字符,這將成爲重要的區別。 –
讓我們像我有下一個字符串:var data =「這是一個不那麼長的字符串」。我需要它是最多10個字符,然後「...」 代碼如何在Swift中使用子字符串? –
如果你有n個字符的限制,那麼你需要檢查你的輸入是否更長。如果是這樣,然後採取其前n - 3個字符(在本例中爲7),並添加「...」他們有一個10字符的字符串。 –