SwiftyPyString is a string extension for Swift.
This library provide Python compliant String operation methods.
pod 'SwiftyPyString'
github 'ChanTsune/SwiftyPyString'
import PackageDescription
let package = Package(
name: "YourProject",
dependencies: [
.package(url: "https://github.com/ChanTsune/SwiftyPyString.git", from: "\(version)")
]
)
import SwiftyPyString
let str = "0123456789"
str[0]
// 0
str[-1]
// 9
let str = "0123456789"
str[0,5]
// 01234
str[0,8,2]
// 0246
str[nil,nil,-1]
// 9876543210
Use Slice object case
let str = "0123456789"
var slice = Slice(start:0, stop:5)
var sliceStep = Slice(start:0, stop:8, step:2)
str[slice]
// 01234
str[sliceStep]
// 0246
var s = "Hello World! " * 2
// "Hello World! Hello World! "
"hello world!".capitalize() // "Hello world!"
"Γ".casefold() // "ss"
"1234".center(10) // " 1234 "
"123"center(10) // " 123 "
"1234".center(10,fillchar:"0") // "0001234000"
"123"center(10,fillchar:"0") // "0001230000"
"abc abc abc".count("abc") // 3
"aaaaaaaaaa".count("a", start:2) // 8
"bbbbbbbbbb".count("bb", end:8) // 4
"hello world!".endswith("!") // true
"hello world!".endswith("world!") // true
"hello".endswith("world") // false
"hello".endswith(["hello","world","!"]) // true
"abc\tabc\t".expandtabs() // "abc abc "
"abc\tabc\t".expandtabs(4) // "abc abc "
"123412312312345".find("123") // 0
"123412312312345".find("12345") // 10
"123412312312345".find("5") // 14
"123412312312345".find("31") // 6
"123412312312345".find("0") // -1
Available after v2.0
"{}, {}, {}".format("a", "b", "c") // "a, b, c"
"{0}, {1}, {2}".format("a", "b", "c") // "a, b, c"
"{0}{1}{0}".format("abra", "cad") // "abracadabra"
"{:,}".format(1234567890) // "1,234,567,890"
Format specification
https://docs.python.org/3/library/string.html#format-specification-mini-language
Available after v2.0
"{A}, {B}, {C}".format(["A": "a", "B": "b", "C": "c"]) // "a, b, c"
"{number:,}".format(["number":1234567890]) // "1,234,567,890"
Format specification
https://docs.python.org/3/library/string.html#format-specification-mini-language
"123412312312345".index("123") // 0
"123412312312345".index("12345") // 10
"123412312312345".index("5") // 14
"123412312312345".index("31") // 6
"123412312312345".index("0") // throw PyException.ValueError
"123abc".isalnum() // true
"οΌοΌοΌοΌA".isalnum() // true
"ζ₯ζ¬θͺ".isalnum() // true
"abc 123".isalnum() // false
"I have pen.".isalpha() // false
"qwerty".isalpha() // true
"ζ₯ζ¬θͺ".isalpha() // true
"123".isalpha() // false
"".isalpha() // false
"I have pen.".isascii() // trur
"qwerty".isascii() // true
"123".isascii() // true
"".isascii() // true
"ιASCIIζεε".isascii() // false
"123".isdecimal() // true
"οΌοΌοΌοΌοΌ".isdecimal() // true
"δΈ".isdecimal() // false
"".isdecimal() // false
"123".isdigit() // true
"οΌοΌοΌοΌοΌ".isdigit() // true
"δΈ".isdigit() // true
"".isdigit() // true
"lower case string".islower() // true
"Lower case string".islower() // false
"lower case String".islower() // false
"lower Case string".islower() // false
"ε°ζεγ§γ―η‘γ".islower() // false
"123".isnumeric() // true
"οΌοΌοΌοΌοΌ".isnumeric() // true
"δΈ".isnumeric() // true
"".isnumeric() // false
"".isprintable() // true
"abc".isprintable() // true
"\u{060D}".isprintable() // false
" ".isspace() // true
"".isspace() // false
"Speace".isspace() // false
"Title Case String".istitle() // true
"Title_Case_String".istitle() // true
"Title__Case String".istitle() // true
"not Title Case String".istitle() // false
"NotTitleCaseString".istitle() // false
"Not Title case String".istitle() // false
"UPPER CASE STRING".isupper() // true
"Upper Case String".isupper() // false
"ε€§ζεγ§γ―η‘γ".isupper() // false
let array = ["abc","def","ghi"]
"".join(array) // "abcdefghi"
"-".join(array) // "abc-def-ghi"
"++".join(array) // "abc++def++ghi"
"abc".ljust(1) // "abc"
"abc".ljust(5) // " abc"
"abc".ljust(5, fillchar:"$") // "$$abc"
"ABCDE".lower() // "abcde"
"γγγγγ".lower() // "γγγγγ"
" lstrip sample".lstrip() // "lstrip sample"
" lstrip sample".lstrip(" ls") // "trip sample"
"lstrip sample".lstrip() // "lstrip sample"
String.maketrans([97:"A",98:nil,99:"String"]) // ["a":"A","b":"","c":"String"]
String.maketrans(["a":"A","b":nil,"c":"String"]) // ["a":"A","b":"","c":"String"]
String.maketrans("abc",y: "ABC") // ["a":"A","b":"B","c":"C"]
String.maketrans("abc", y: "ABC", z: "xyz") // ["a":"A","b":"B","c":"C","x":"","y":"","z":""]
"a,b,c".partition(",") // ("a",",","b,c")
"a,b,c".partition("x") // ("a,b,c","","")
"abc".replace("bc", new: "bcd") // "abcd"
"Python python python python".replace("python", new: "Swift", count: 2) // "Python Swift Swift python"
"0123456789".rfind("0") // 0
"0123456789".rfind("02") // -1
"0123454321".rfind("2") // 8
"0123454321".rfind("1", end: -1) // 1
"0123456789".rindex("0") // 0
"0123456789".rindex("02") // throw PyException.ValueError
"0123454321".rindex("2") // 8
"0123454321".rindex("1", end: -1) // 1
"abc".rjust(1) // "abc"
"abc".rjust(5) // "abc "
"abc"rjust(5,fillchar:"z") // "abczz"
"a,b,c".rpartition(",") // ("a,b", ",", "c")
"a,b,c".rpartition("x") // ("", "", "a,b,c")
"a,b,c,d,".rsplit(",") // ["a", "b", "c", "d", ""]
"a,b,c,d,".rsplit() // ["a,b,c,d,"]
"a,b,c,d,".rsplit(",", maxsplit: 2) // ["a,b,c","d", ""]
"a,b,c,d,".rsplit(",", maxsplit: 0) // ["a,b,c,d,"]
"aabbxxaabbaaddbb".rsplit("aa", maxsplit: 2) // ["aabbxx", "bb", "ddbb"]
"rstrip sample ".rstrip() // "rstrip sample"
"rstrip sample ".rstrip("sample ") // "rstri"
" rstrip sample".rstrip() // " rstrip sample"
"a,b,c,d,".split(",") // ["a", "b", "c", "d", ""]
"a,b,c,d,".split() // ["a,b,c,d,"]
"a,b,c,d,".split(",", maxsplit: 2) // ["a", "b", "c,d,"]
"a,b,c,d,".split(",", maxsplit: 0) // ["a,b,c,d,"]
"aabbxxaabbaaddbb".split("aa", maxsplit: 2) // ["", "bbxx", "bbaaddbb"]
"abc\nabc".splitlines() // ["abc", "abc"]
"abc\nabc\r".splitlines(true) // ["abc\n", "abc\r"]
"abc\r\nabc\n".splitlines() // ["abc", "abc"]
"abc\r\nabc\n".splitlines(true) // ["abc\r\n", "abc\n"]
"hello world!".startswith("hello") // true
"hello world!".startswith("h") // true
"hello".startswith("world") // flase
"hello".startswith(["hello", "world", "!"]) // true
" spacious ".strip() // "spacious"
"www.example.com".strip("cmowz.") // "example"
"aBcDe".swapcase() // "AbCdE"
"AbC dEf".swapcase() // "aBc DeF"
"γγγγγ".swapcase() // "γγγγγ"
"Title letter".title() // "Title Letter"
"title Letter".title() // "Title Letter"
"abc abC _ aBC".title() // "Abc Abc _ Abc"
let table = String.maketrans("", y: "", z: "swift")
"I will make Python like string operation library".translate(table)
// "I ll make Pyhon lke rng operaon lbrary"
"abcde".upper() // "ABCDE"
"γγγγγ".upper() // "γγγγγ"
"abc".zfill(1) // "abc"
"abc".zfill(5) // "00abc"
"+12".zfill(5) // "+0012"
"-3".zfill(5) // "-0003"
"+12".zfill(2) // "+12"
For more detail please refer below link
https://docs.python.org/3/library/stdtypes.html#string-methods
protocol Sliceable : Collection {
init() /* Required. */
subscript (_ start: Int?, _ stop: Int?, _ step: Int?) -> Self { get }
subscript (_ start: Int?, _ end: Int?) -> Self { get }
subscript (_ i:Int) -> Self.Element { get } /* Required. */
subscript (_ slice: Slice) -> Self { get }
mutating func append(_ newElement: Self.Element) /* Required. */
}
With the introduction of SwiftyPyString
, String
conforms to the Sliceable
protocol.
By conforming to Sliceable
protocol, it can get partial sequences as introduced in Slice String.
If the type you want to conform to Sliceable
is conforms to RangeReplaceableCollection
, it can be used simply by defining subscript (_ i:Int) -> Self.Element { get }
.
In addition, if associatedtype Index
of Collection
is Int
, you can conform to Sliceable
with a very short code as follows, like Array
.
extension Array : Sliceable { }
let arr = [1, 2, 3, 4, 5]
arr[0, 3]
// [0, 1, 2]
let slice = Slice(step:2)
arr[slice]
// [1, 3, 5]
This project published under the MIT license. See the LICENSE file for more information.
link |
Stars: 1 |
Last commit: 4 days ago |
Add
removeprefix
, removesuffix
method(#32)join
support Sequence
protocol conformed valueChange
Fix
isTitlecase
capitalize
expandtabs
endswith
, startswith
find
, rfind
count
split
, rsplit
istitle
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics