چطور برای کد های تکراری یک کتابخانه درست کنم؟
درود خدمت شما . امید وارم تیتر درست زده باشم .
برای حذف کردن کد های تکراری می شه کلاس درست کرد و فانکشن قرار داد و ...
ولی می خواستم ببنیم دوستان چطور این کار هارو انجام می دند به عنوان مثال می شود از extension هم استفاده کرد
به عنوان مثال یک سری کد داریم که می یاند برای ما ( درجه فارنهایت درست می کنند ). حالا من می خوام این رو به صورتی درست بکنم که وقتی نیاز دارم هرجا هست سریع فراخوانی کنمش و در موقع فراخوانی بهم بگه مثلا جای این متغییر چی بزارم ( استرینگ یا .. )
تشکر
شما می توانید کلاس شبیه این ایجاد کنید
class ob: NSObject {
public func f (_ fr: Int,successHandler:@escaping (_ response:Int)->Void) {
successHandler(fr)
}
}
و هرجا دوست داشتین به این شکل فراخوانی کنید
let Launcher = ob()
Launcher.f(20) { (response) in
print(response)
}
درود تشکر از شما Alamofire هم همینطوری تعریف شده ؟
Alamofire.request("https://httpbin.org/get").responseJSON { response in
print(response.request) // original URL request
print(response.response) // HTTP URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
درود خدمت دوستان . من یک کلوژور درست کردم به شرح زیر
static func Test (printUrl: String, OnCompleted: @escaping (_ respons: String) -> Void) {
OnCompleted (printUrl)
}
خوب وقتی فراخوانی می کنم می تونم یک respons تعریف کنم مثل مثال زیر
ClassNameFile.Test(printUrl: "hi") { (respons) in
print(respons)
<#code#>
}
خوب خیلی خوبه بدون مشکل می یاد و hi رو چاپ می کنه ولی یک مشکلی من دارم . به کد زیر توجه کنید
Alamofire.request("https://httpbin.org/get").responseJSON { response in
print(response.request) // original URL request
print(response.response) // HTTP URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
همانطور که می بنید برای respons اومده مواردی مثل request و response و data و result تعریف کرده . من چطور می تونم این سری موارد رو برای هر کلوژر خودم درست کنم
علاوه بر اینکه یک سوال دیگه هم خدمت دوستان داشتم اینکه چطور در تگ معرفی کلوژر تونسته مثلا .request و responseJSON تعریف کنه این request دقیقا چی هست ؟ یک extension هست ؟ یا چیز دیگه ای هست ؟
من شروع کردم تمام کد های تکراری خودمو تبدیل کردن به کلوژور و فانکشن های متفرقه تا حجم کپی نوشته هام کم بشه و همیشه دسترسی داشته باشم در صورتی که دوستان کمک کنند می تونم بسیار تمیز تر کدبنویسم
سلام.
اینکه برای کدهاتون فانکشن تعریف کنید کار بسیار پسندیده ای هست.
ببینید کلوژر به { و } میگن. یعنی عبارت سلام الان داخل یک کلوژر هست:
{ سلام }
یا
{
hello
}
شما در اصل کتابخانه درست نکردید، شما یک فانکشن یا همان متد که تقریبا یکی هستند، درست کردید.
کتابخانه به مجموعه عظیمی از فانکشن ها و کدها میگن که درحد یک برنامه هستند و دارای کلاسهای مختلف هستند و داخل هر کلاسشون کلی فانکشن هست. البته شما میتونید کتابخانه بسازید ولی فعلا با همین فانکشن های ساده شروع کنید.
این یک فانکشن ساده هست که هروقت صدا بشه اون عملی که داخلش نوشته شده انجام میشه ! مثلا اینجا چاپ میکنه hello
func test () {
print("hello")
}
هرجا خواستیم صداش کنیم اینطوری صداش میکنیم:
test()
به این مدل فانکشن ها که نه مقداری رو هنگام صدا زدن بهشون میدیم نه اینکه به ما مقداری برمیگردونند میگیم فانکشن های void (خالی)
حالا بیایم یه پله پیشرفته ترش کنیم. یعنی یه اسمی بهش بدیم و اون اسم رو برامون چاپ کنه !
func test (harEsmiKeDustDarid: String) {
print(harEsmiKeDustDarid)
}
حالا اینطوری صداش میکنیم:
test(harEsmiKeDustDarid: "majid")
این فانکشن چاپ خواهد کرد: majid و هر اسمی که داخل آرگومان اون متد بیاد چاپ خواهد شد... آرگومان به عبارات داخل پرانتزی میگن که جلوی اسم فانکشن هست.
خوب به این نکته مهم توجه کنید: اونجا که نوشتم harEsmiKeDustDarid یعنی واقعا هر اسمی که دوست دارید میتونید بجای این عبارت بنویسید و این میشه کلید شما. و داخل فانکشنتون میتونید هرکاری خواستید با این کلید انجام بدید. درحقیقت متغیری که هنگام صدا زدن فانکشن ازش استفاده میکنید میاد جای این کلید میشینه و شما میتونید پیشبینی کنید که چه کاری باهاش انجام بدید. در اینجا ما بهش گفتیم که کلیدمون رو چاپ کن. میتونستیم بگیم یه جمله ثابت هم بهش اضافه کن بعد چاپش کن! اینطوری:
func Test (harEsmiKeDustDarid: String) {
print("\(harEsmiKeDustDarid) duste mane")
}
حالا اگه دقیقا مثل قبل صداش بزنیم بجای اینکه چاپ کنه majid، میاد چاپ میکنه majid duste mane
حالا یه نکته کوچیک که احتمالا خودتون بلد هستید و فقط جهت یاد آوری میگم: اون کلمه static که قبل از اسم فانکشن نوشته میشه باعث میشه که از همه کلاس های برنامه بشه به اون فانکشن دسترسی داشت ! این خیلی خوبه ولی اگه فانکشن های استاتیک زیادی داشته باشید برنامتون هنگام اجرا خیلی سنگین خواهد شد. پس مراقب باشید.
حالا اگر بخوایم بجای یه اسم، دوتا اسم به همون فانکشن قبلی بدیم باید اینطوری بنویسیم:
func Test (esmeAval: String, esmeDovom: String) {
print("\(esmeAval) duste mane va \(esmeDovom)")
}
حالا باید اینطوری صدای بزنیم:
test(esmeAval: "majid", "hamid")
و این عبارت چاپ خواهد شد:
majid duste mane va hamid
نتیجه میگیریم که هنگام تعریف میتونید توسط یک کاما دارخل آرگومان ، چندین ورودی بهش بدید !
حالا یه سری متد هم هستن که خفن ترین نوع متد هستند. به اون متدها میگن متدهای برگشتی ! یعنی یه عبارت یا متغیر رو برمیگردونن. یعنی چی برمیگردونن؟ یعنی هرجا اون متد رو استفاده کردید، انگار عدد یا نتیجه نهایی رو استفاده کردید ! یعنی خود اون متدی که صدا زدید تبدیل میشه به یک عبارت که ازش در خروجی میخواستید !
مثال: میخوام یک متد یا فانکشن درست کنیم که هر دو عددی که بهش دادیم برامون جمع کنه و نتیجش رو بگه:
func jamKon(adadeAval:Int, adadeDovom:Int)-> Int {
var a = adadeAval + adadeDovom
return a
}
اون -> که بعد از آرگومان متدمون نوشتم نشون میده که جنس عبارتی که میخواد برگرده چیه! که در اینجا یک عدد از جنس Int بود.
حالا اینطوری از این متد استفاده میکنیم:
var natije = jamKon(adadeAval: 2, 3)
print(natije)
الان چیزی که چاپ خواهد شد، عدد 5 خواهد بود! یعنی اون متغیر نتیجه، تبدیل شده به یک عدد 5 ساده !
دقت کردید که وقتی میخوام یک فانکشن رو صدا بزنم، کلید اولین آرگومانش هم مینویسم! ما میتونیم کلید همه آرگومان هارو بنویسیم! یعنی اینجوری:
var natije = jamKon(adadeAval: 2, adadeDovom: 3)
print(natije)
اما فقط نوشتن اولیه اجباریه. پس این هم علت اینطوری نوشتنش بود.
این بود همه داستان متدها و فانکشن ها و کتابخانه ها!
هر سوالی داشتی بپرس.
response.data داره کلمه data و همینطور result که مثل اکستنشنز هستند و دارند روی پروژه اجرا می شند . من دقیقا همون می خوام بدونم چطور .date می زاره داخل کلوژور و .... انجام می شه . درست کردن اون خیلی برام مهمه . و همینطور در جریان باشیم که من خود alomafire رو پیگیری کردم دیدم خیلی این بخشش تو در تو هست جاهایی open var و رفته یک جا کلاس و یک جا به اکستنشنز و یک جا به enum متصل شده و دیدم که چقدر تو در تو چنین چیزی نوشتند . اگر این مورد مثل مثالی که در لینک لینک زدم رو می تونید یک مثال بزنید چطور مثل اون مواردی مثل data , result و ... تعریف کنم ممنون می شم (9 سال پیش)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .