یک رشته نمایندهی دادههای متنی است.
در Swift، یک String مجموعهای مرتب از مقادیر Character است که هر کاراکتر در آن نمایندهی یک کاراکتر یونیکد است.
شما یک رشته را با استفاده از یک «لیترال رشتهای» میسازید که دنبالهای از کاراکترها است و میان دو علامت نقلقول دوگانه (") قرار میگیرد.
برای رشتههای چندخطی، از سه علامت نقلقول دوگانه (""") استفاده کنید:
let hello: String = "Hello, World!"
let poem: String = """
Roses are red,
Violets are blue.
Sugar is sweet,
And so are you.
"""
رشتههای Swift بهطور یکپارچه با کلاس NSString در framework Foundation پیوند میخورند و دسترسی به تواناییهای گستردهی پردازش متن را فراهم میکنند.
یک Character نمایندهی یک «خوشهی گرافیمی گسترده» است، یعنی کاراکتری خوانا برای انسان که از یک یا چند مقدار اسکالر یونیکد تشکیل شده است.
یک مقدار اسکالر یونیکد، یک نقطهی کد ۲۱بیتی در بازهی U+0000 تا U+D7FF (شامل هر دو سر) یا U+E000 تا U+10FFFF (شامل هر دو سر) است.
let aChar: Character = "A"
وقتی یک لیترال رشتهای مینویسید، Swift بهطور خودکار نوع آن را String استنتاج میکند.
برای ذخیرهی یک کاراکتر بهصورت Character، باید یک «حاشیهنویسی نوع» صریح بنویسید:
let aString = "A" // Inferred as String
let aChar: Character = "A" // Explicitly typed as Character
print(type(of: aString)) // Prints String
print(type(of: aChar)) // Prints Character
// The following code will not compile:
let badChar: Character = "Too many characters"
// Error: Cannot convert value of type 'String' to specified type 'Character'
میتوانید رشتهها را با استفاده از عملگر جمع (+) به هم بچسبانید:
print("honey" + "comb")
// Prints "honeycomb"
بدون اینکه ابتدا کاراکتر را به رشته تبدیل کنید، نمیتوانید یک Character را مستقیماً با + به یک String بچسبانید.
با این حال، میتوانید از متد append(_:) استفاده کنید تا یک رشته یا یک کاراکتر را مستقیماً به یک رشتهی قابلتغییر بیفزایید:
var greeting = "Hello"
let world = ", world"
let period: Character = "."
greeting.append(world)
print(greeting) // Prints "Hello, world"
greeting.append(period)
print(greeting) // Prints "Hello, world."
درونیابی رشته به شما امکان میدهد با جایگذاری ثابتها، متغیرها، لیترالها و عبارتها درون لیترالهای رشتهای، یک رشته بسازید.
هر عبارت را درون پرانتزهایی بگذارید که پیش از آنها یک بکاسلش آمده است (\( ... )):
let radius = 5.0
let circle = "The area of a circle with radius \(radius) is \(Double.pi * radius * radius)"
print(circle) // Prints "The area of a circle with radius 5.0 is 78.53981633974483"
رشتهها و کاراکترها چندین ویژگی برای بررسی محتوای خود ارائه میدهند.
ویژگیهای رایج رشته عبارتاند از:
| ویژگی | توضیح | مثال |
|---|---|---|
isEmpty |
اگر رشته هیچ کاراکتری نداشته باشد، مقدار true را برمیگرداند |
نتیجهی "Hello".isEmpty برابر false است |
count |
تعداد کاراکترهای رشته را برمیگرداند | نتیجهی "Hello".count برابر 5 است |
برای فهرست کامل ویژگیها، به مستندات String اپل مراجعه کنید.
ویژگیهای رایج کاراکتر عبارتاند از:
| ویژگی | توضیح | مثال |
|---|---|---|
isLowercase |
اگر کاراکتر حرف کوچک باشد، مقدار true را برمیگرداند |
نتیجهی "a".isLowercase برابر true است |
isUppercase |
اگر کاراکتر حرف بزرگ باشد، مقدار true را برمیگرداند |
نتیجهی "A".isUppercase برابر true است |
isNumber |
اگر کاراکتر یک رقم باشد، مقدار true را برمیگرداند |
نتیجهی "1".isNumber برابر true است |
isWhitespace |
اگر کاراکتر فضای خالی باشد، مقدار true را برمیگرداند |
نتیجهی " ".isWhitespace برابر true است |
برای فهرست کامل ویژگیها، به مستندات Character اپل مراجعه کنید.
میتوانید انواع دیگر را با استفاده از سازندهی String(_:) به رشته تبدیل کنید؛ این سازنده از انواع استانداردی مانند Int، Double و Character پشتیبانی میکند:
let charX: Character = "x"
print(String(charX)) // Prints "x"
print(String(110)) // Prints "110"
print(String(Double.pi)) // Prints "3.141592653589793"
لیترالهای رشتهای Swift از چندین دنبالهی فرار برای کاراکترهای ویژه پشتیبانی میکنند:
| دنباله | توضیح |
|---|---|
\0 |
کاراکتر تهی |
\\ |
بکاسلش |
\t |
تب افقی |
\n |
تغذیهی خط (خط جدید) |
\r |
بازگشت به ابتدای خط |
\' |
علامت نقلقول تک |
\" |
علامت نقلقول دوگانه |
\u{n} |
اسکالر یونیکد دلخواه (مبنای ۱۶) |
let quote: String = "\"Hello\", he said."
print(quote) // Prints "Hello", he said.
let unicode: Character = "\u{1F496}"
print(unicode) // Prints 💖
در این تمرین شما کدی مینویسید که به یک شرکت تابلوسازی کمک میکند پیامهای سفارشی برای تابلوهایشان بسازد.
ثابتهای رشتهای زیر را تعریف کنید که برای ساختن تابلوها به کار میروند:
birthday: مقدار "Birthday" را نگه میداردvalentine: مقدار "Valentine's Day" را نگه میداردanniversary: رشتهی "Anniversary" را نگه میداردکاراکترهای ثابت زیر را تعریف کنید که برای ساختن تابلوها به کار میروند:
space: مقدار " " را نگه میدارد (یک فاصلهی تک)exclamation: مقدار "!" را نگه میداردتابع buildSign(for:name:) را پیادهسازی کنید؛ این تابع آرگومان for را میگیرد که یکی از سه رشتهای را نگه میدارد که در تمرین اول تعریف کردید، و آرگومان name را میگیرد که رشتهای است و اسم شخصی را نگه میدارد که تابلو برای اوست.
برای ساختن پیام تابلو باید از الحاق استفاده کنید و یادتان باشد که ثابتهای تعریفشده را دوباره به کار ببرید.
تابع باید پیام تابلو را بهصورت یک رشته برگرداند.
buildSign(for: birthday, name: "Otto")
// returns "Happy Birthday Otto!"
buildSign(for: anniversary, name: "Valentina")
// returns "Happy Anniversary Valentina!"
تابع graduationFor(name:year:) را پیادهسازی کنید؛ این تابع آرگومان name را میگیرد که رشتهای است و اسم شخصی را نگه میدارد که تابلو برای اوست، و آرگومان year را میگیرد که یک عدد صحیح است و سالی را نگه میدارد که شخص در آن فارغالتحصیل میشود.
برای ساختن پیام تابلو باید از رشتههای قالبی استفاده کنید.
تابع باید پیام تابلو را بهصورت یک رشته برگرداند.
graduationFor(name: "Padma", year: 2023)
// returns "Congratulations Padma!\nClass of 2023"
تابع costOf(sign:) را پیادهسازی کنید؛ این تابع آرگومان sign را میگیرد که رشتهای است و پیام تابلو را نگه میدارد.
تابلو یک قیمت پایهی ۲۰ در واحد پول دادهشده دارد. بهعلاوه، هر حرف ۲ هزینه دارد (فاصلههای خالی هم در محاسبه لحاظ میشوند).
تابع باید هزینهی تابلو را بهصورت یک عدد صحیح برگرداند.
costOf(sign: "Happy Birthday Grandma!")
// returns 66