آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

چطور برای کد های تکراری یک کتابخانه درست کنم؟

شهریار توکلی  9 سال پیش  9 سال پیش
0 0

درود خدمت شما . امید وارم تیتر درست زده باشم . 

برای حذف کردن کد های تکراری می شه کلاس درست کرد و فانکشن قرار داد و  ...

ولی می خواستم ببنیم دوستان چطور این کار هارو انجام می دند به عنوان مثال می شود از  extension هم استفاده کرد 

 

به عنوان مثال یک سری کد داریم که می یاند برای ما ( درجه فارنهایت درست می کنند ). حالا من می خوام این رو به صورتی درست بکنم که وقتی نیاز دارم هرجا هست سریع فراخوانی کنمش و در موقع فراخوانی بهم بگه مثلا جای این متغییر چی بزارم ( استرینگ یا  .. )

تشکر 

 برای این سوال 4 پاسخ وجود دارد.
پاسخ به سوال 
کاووس خواجوی  9 سال پیش
+1 0

شما می توانید  کلاس شبیه این ایجاد کنید 

 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)
}
پاسخ به سوال 
شهریار توکلی  9 سال پیش
0 0

درود تشکر از شما 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)")
}
}
0 0
اینجور نوشتن فکر کنم اسمش کلوژور باشه ؟ هرچی سرچ می کنم نمی یاد احتمالا اسم انگلیسیشو بد نوشتم اگر اسم انگلیسی اینجوری نوشتن را دارید لطفا بگید تا داکیومنتشم بخونم (9 سال پیش)
پاسخ به سوال 
شهریار توکلی  9 سال پیش
0 0

درود خدمت دوستان . من یک کلوژور درست کردم به شرح زیر

 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 هست ؟ یا چیز دیگه ای هست ؟

من شروع کردم تمام کد های تکراری خودمو تبدیل کردن به کلوژور و فانکشن های متفرقه تا حجم کپی نوشته هام کم بشه و همیشه دسترسی داشته باشم در صورتی که دوستان کمک کنند می تونم بسیار تمیز تر کدبنویسم

0 0
دوستان من چندین نمونه انجام دادم ولی بازم مشکل در پیاده سازی چنین چیزی داره لطفا اگر وقت دارید یک نمونه قرار بدید تا بنده بتونم از روش یاد بگیرم ممنون می شم (9 سال پیش)
پاسخ به سوال 
alfredo  9 سال پیش
0 0

سلام.

اینکه برای کدهاتون فانکشن تعریف کنید کار بسیار پسندیده ای هست.

ببینید کلوژر به { و } میگن. یعنی عبارت سلام الان داخل یک کلوژر هست:

{ سلام } 

یا 

{

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)

اما فقط نوشتن اولیه اجباریه.  پس این هم علت اینطوری نوشتنش بود.

این بود همه داستان متدها و فانکشن ها و کتابخانه ها!

هر سوالی داشتی بپرس.

0 0
درود خدمت شما دوست گرامی و اول از همه چیز باید تشکر بکنم بخاطر وقتی که قرار دادید برای نوشتن متن و پاسخگویتون . تشکر . ولی من نسبت به مواردی که مطرح فرمودید اطلاعات دارم و استفاده کردم ولی متاسفانه هنوز به سوال خودم پاسخ نگرفتم . اگر به کلوژور alomofire توجه کنید می بنید که چنین چیزی به نام response.data داره کلمه data و همینطور result که مثل اکستنشنز هستند و دارند روی پروژه اجرا می شند . من دقیقا همون می خوام بدونم چطور .date می زاره داخل کلوژور و .... انجام می شه . درست کردن اون خیلی برام مهمه . و همینطور در جریان باشیم که من خود alomafire رو پیگیری کردم دیدم خیلی این بخشش تو در تو هست جاهایی open var و رفته یک جا کلاس و یک جا به اکستنشنز و یک جا به enum متصل شده و دیدم که چقدر تو در تو چنین چیزی نوشتند . اگر این مورد مثل مثالی که در لینک لینک زدم رو می تونید یک مثال بزنید چطور مثل اون مواردی مثل data , result و ... تعریف کنم ممنون می شم (9 سال پیش)
+1 0
ببخشید که درست متوجه سوالتون نشده بودم. اینکه یه سری متدها با نقطه تشکیل فانکشنهای تو در تو رو میدند رو نمیدونم ولی اون متدهایی که داخل اون لینکی که قرار دادید و شما بهش میگید کلوژر، کامپلیشن هندلر هستند. نکته جالب اینجاست که یکی از دوستان بنده امروز سعی داشت بهم یاد بده از اون متدهای تو در تو درست کنم که مثل اکستنشن رفتار می کنند ولی من مقاومت کردم و اجازه ندادم یادم بده. ایشالا فردا پسفردا میپرسم ازش و بهتون میگم چطوریه... (9 سال پیش)
0 0
ممنون دوست محترم . من چندین جا این سوال مطرح کردم ولی هنوز جواب ساده که متوجه بشم نگرفتم . و کد های خود alomfire بسیار تو در تو هست و چیز خاصی که بتونم پیاده کنم رو متوجه نشدم (9 سال پیش)
0 0
ممنون دوست محترم . من چندین جا این سوال مطرح کردم ولی هنوز جواب ساده که متوجه بشم نگرفتم . و کد های خود alomfire بسیار تو در تو هست و چیز خاصی که بتونم پیاده کنم رو متوجه نشدم (9 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .