یکشنبه ۱۹ آذر ۰۲ | ۱۳:۱۰ ۲۲ بازديد
Single Expression Implicit Returns
در اینجا، نوع تابع دوم آرگومان تروتمیز گردیده ، پرنور می نماید که یک مقدار Bool بایستی با closure بازگردانده طراحی اپلیکیشن در مشهد خواهد شد.
از آنجا که بادی closure دربرگیرنده یک عبارت واحد (s1 > s2) میباشد که یک مقدار Bool را برمیگرداند، هیچ ابهامی نیست و کلمه و واژه کلیدی بازگشتی را میقدرت حذف کرد.
برای برگرداندن یک Single expression در expression closures ، واژه و کلمه کلیدی ‘return’ در بخش اعلان آن حذف می گردد.
var count:[Int] = [5, 10, -6, 75, 20]
let descending = count.sorted(by: { n1, n2 in n1 > n2 })
let ascending = count.sorted(by: { n1, n2 in n1 < n2 })
print(descending)
print(ascending)
خروجی :
[75, 20, 10, 5, -6]
[-6, 5, 10, 20, 75]
خویش فرمان به وضوح تعریف و تمجید مینماید که زمانی string1 والاخیس از حرفه 2 میباشد، true باشد در غیر این شکل false، به این ترتیب عبارت return در اینجا حذف می شود.
Known Type Closures
توده دوتا را در حیث بگیرید.
میدانیم که گردآوری، نوع داده عدد درست را برمی گرداند.
از این رو closures های نوع شناخته گردیده به طور تحت اعلام میگردند :
let sub = {
(no1: Int, no2: Int) -> Int in
return no1 - no2
}
let digits = sub(10, 20)
print(digits)
خروجی :
-10
اعلان اسمهای Shorthand Argument تحت عنوان Closures
سوئیفت 4 به صورت اتومات اسمهای Shorthand Argument را برای بستههای داخل خطی ارائه مینماید، که میقدرت از آنان برای اشاره به مقادیر آرگومانهای Closures با اسمهای $0، $1، $2 و … به کار گرفت.
var shorthand: (String, String) -> String
shorthand = { $1 }
print(shorthand("100", "200"))
در اینجا $0 و $1 به آرگومان های فن اولیه و دوم closure اشاره دارااست.
خروجی :
200
سوئیفت 4 مخاطب را تسهیل مینماید تا closures Inline را بهتیتر اسم shorthand argument با آرم دادن $0 ، $1 ، $2 — $n نشانه دهد.
وقتی که اسم آرگومان های مختصر را در باطن closure expressions اکران میدهیم، فهرست آرگومان های closure در نصیب defined حذف می گردد.
مبتنی بر نوع تابع ، اسم آرگومان مختصر مشتق شود.
از آنجایی که آرگومان مختصر در بادی expressions تعریفوتمجید گردیده است ، کلمه و واژه کلیدی ‘in’ حذف میگردد.
Closures تحت عنوان توابع Operator
سوئیفت 4 صرفا با ارائه عملکردهای اپراتور تحت عنوان Closures ، منش سادگی برای دسترسی به اعضاوجوارح مهیا می نماید.
در نمونههای گذشته، واژه و کلمه کلیدی «Bool» برای برگرداندن «true» وقتی که حرفهها موازی می باشند به کارگیری می شود ، در غیر این شکل «false» را برمیگرداند.
این expression به وسیله تابع عملگر در موقعیت تحت معمولیخیس میگردد :
let numb = [98, -20, -30, 42, 18, 35]
var sortedNumbers = numb.sorted ({
(left: Int, right: Int) -> Bool in
return left < right
})
let asc = numb.sorted(<)
print(asc)
خروجی :
[-30, -20, 18, 35, 42, 98]
Closures تحت عنوان تریلر
ارسال آرگومان پایانی تابع به یک closure expression با یاری “Trailing Closures” اعلام میشود.
فارغ تابع () با {} نوشته میشود.
به کار گیری از آن هنگامی مایحتاج میباشد که قابلیت تایپ کردن تابع به طور داخل خطی در یک خط وجود نداشته باشد.
reversed = sorted(names) { $0 > $1}
که در آن {$0 > $1} بهتیتر closure های انتهایی اعلام گردیده در بیرون (names) آرم داده می شوند.
import Foundation
var letters = ["North", "East", "West", "South"]
let twoletters = letters.map({
(state: String) -> String in
return state.substringToIndex(advance(state.startIndex, 2)).uppercaseString
})
let stletters = letters.map() {
$0.substringToIndex(advance($0.startIndex, 2)).uppercaseString
}
print(stletters)
خروجی :
[NO, EA, WE, SO]
به چنگ آوردن مقادیر و اشکال Reference
در سوئیفت 4، به دست آوردن مقادیر اثبات و متغیر با امداد closure ها اجرا میشود.
همینطور مقادیر آن اثبات ها و متغیرهای باطن بادی closure را ارجاع داده و تغییر تحول میدهد، حتی درصورتی که متغیرها دیگر وجود نداشته باشند.
به چنگ آوردن مقادیر اثبات و متغیر با استعمال از تابع تو در تو با تایپ کردن تابع در بادی تابع دیگر به دست میاید.
یک تابع تو در تو موراد پایین را میگیرد :
آرگومان های تابع بیرونی
اثبات ها و متغیرهای تعریفوتمجید گردیده در تابع Outer را ضبط نمایید.
در سوئیفت 4، زمانی که یک اثبات یا این که یک متغیر در درون یک تابع اعلان می گردد، به آن متغیرها نیز به صورت اتومات با closure ارجاع داده میشود.
همینطور این قابلیت و امکان را برای ارجاع بیش تر از دو متغیر تحت عنوان closure یکسان به تفصیل ذیل مهیا می نماید :
let decrem = calcDecrement(forDecrement: 18)
decrem()
در اینجا متغیرهای oneDecrement و Decrement هر دو به عبارتی بلوک خاطر را تحت عنوان رفرنس closure آرم میدهند.
func calcDecrement(forDecrement total: Int) -> () -> Int {
var overallDecrement = 100
func decrementer() -> Int {
overallDecrement -= total
print(overallDecrement)
return overallDecrement
}
return decrementer
}
let decrem = calcDecrement(forDecrement: 18)
decrem()
decrem()
decrem()
خروجی :
82
64
46
وقتی که هر توشه تابع فرنگی calcDecrement فراخوانی میشود، تابع () decrementer را فراخوانی می نماید و مقدار را 18 کاهش میدهد و فیض را با یاری تابع فرنگی calcDecrement برمی گرداند.
در اینجا calcDecrement تحت عنوان یک closure فعالیت می نماید.
حتی درصورتی که تابع () decrementer هیچ آرگومانی ندارد، closure به صورت پیشفرض به متغیرهای ‘overallDecrement’ و ‘total’ با به دست آوردن مقادیر جان دار آن اشاره مینماید.
اسکن مقادیر متغیرهای معین گردیده با تابع () new decrementer ذخیره میشود.
Swift 4 عملکردهای مدیر یاد را با اختصاص فضاهای یاد در هنگامی که متغیرها در اکنون استعمال نیستند رئیس می نماید.