<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های صادق بیطرفان</title>
        <link>https://virgool.io/feed/@sadeghbitarafan</link>
        <description>غرق در دنیای برنامه نویسی ,  برنامه نویس خندون و پر انرژی</description>
        <language>fa</language>
        <pubDate>2026-06-17 02:22:31</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/59074/avatar/SiMR1F.png?height=120&amp;width=120</url>
            <title>صادق بیطرفان</title>
            <link>https://virgool.io/@sadeghbitarafan</link>
        </image>

                    <item>
                <title>تموم کن very گفتن رو!</title>
                <link>https://virgool.io/@sadeghbitarafan/%D8%AA%D9%85%D9%88%D9%85-%DA%A9%D9%86-very-%DA%AF%D9%81%D8%AA%D9%86-%D8%B1%D9%88-pg8nmdgxkclx</link>
                <description>Stop saying veryخیلی از ما به خاطر اینکه لغت های کمی بلدیم، از کلمات مختلف استفاده نمی کنیم و در نهایت برای تاکید از very قبل از صفت ها و ... استفاده میکنیم. اما امروز قصد داریم تا کمی دامنه لغات رو افزایش بدیم و در جملات کمتر از very استفاده کنیم.استفاده زیاد از کلمه very مثل مشت هایی میمونه که به صورت شنونده زده میشه :||نقل قول از JamesESبا برسی برخی از کلمات پر کاربرد ادامه میدیم .1) Ruderude imageما در فارسی به کسی که خیلی بی ادب باشد میگوییم او گستاخ است در انگلیسی هم بهتر است به جای (Very rude) از (Vulgar)  استفاده کنیم.❌ Our neighbour is very rude.✅ Our neighbour is vulgar.2) Shortshort imageوقتی میخوایم بگیم یک مکالمه بسیار کوتاه است از واژه مختصر استفاده میکنیم.در انگلیسی هم به جای استفاده از (Very short) بهتر است از (Brief) استفاده کنیم.❌ This is a very short message from Ali.✅ This is a brief message from Ali.3) boringboring imageوقتی یه مسئله ای برامون حوصله سر بره میگیم اون کسل کننده است . در انگلیسی هم بهتره به جای (Very boring) از (dull) استفاده کنیم.یادتون نره این کلمه در خودش حس احمقانه رو به مخاطب میده پس سعی کنید در جملات رسمی از این کلمه استفاده نکنید.❌ This place is very boring.✅ This place is dull.4) Goodgood imageما در فارسی وقتی میخوایم کار یه آشپز حرفه ای رو توصیف کنیم، میگیم تو یه آشپز خارق العاده ای.در انگلیسی هم به جای استفاده از (Very good) از (Superb) استفاده میکنیم.یادتون باشه از این کلمه زمانی استفاده کنید یک چیز واقعا خارق العاده هستش اگر نه از همان good استفاده کنید.❌ My home has a very good view✅ My home has a superb view.cold imageتصور کنید در دمای 4- هستیم و داریم میلرزیم، نمیگیم خیلی سردمه میگیم دارم یخ میزنم. در انگلیسی هم بهتر است از (freezing) به جای (Very cold) استفاده کنیم.❌ Today the weather is very cold.✅ Today the weather is freezing.6) Hothot imageتصور کنید در دمای 40+ هستید و دوستتون کنارتون هستش شما مطمئنا به دوستون نمیگید من گرمم هستش میگید دارم آتیش میگیرم از گرما.در انگلیسی ما برای توصیف حرارت بالای مایعات و جامدات کلمات متفاوتی استفاده میکنیم;برای جامدات از Scorching و برای مایعات از Scalding استفاده میکنیم❌ This water is very hot.✅ This water is Scalding.7) Hungryhungry imageوقتی که مثل قحطی زده ها داریم غذا میخوریم نمیگیم خیلی گرسنمه میگیم دارم میمیرم از گشنگی در انگلیسی هم به جای (Very hungry) از (ravenous) استفاده میکنیم.البته یادتون نره شما میتونید از این کلمه حالت های مختلف استفاده کنید مثل اینکه بگید من گرسنه یادگیریم البته این جمله خیلی در فارسی حسی ایجاد نمیکند.❌ I am very hungry, i want to eat all of the foods in the world.✅ I am ravenous, i want to eat all of the foods in the world.8) Slowslow image در فارسی برای بیان سرعت  خیلی پایین از کلمه یواش استفاده میکنیم . در انگلیسی هم به جای استفاده از (Very slow) بهتره از (Sluggish) استفاده کنیم.❌  The turtles always walking very slow.✅ The turtles always walking sluggish.9) Fastfast imageدر فارسی برای بیان سرعت خیلی بالا از کلمه تند استفاده میکنیم . در انگلیسی هم به جای استفاده از (Very fast) بهتره از (Rapid) استفاده کنیم.❌ The growth of the two cities has been very fast since 1900.✅ The growth of the two cities has been rapid since 1900.10) Tiredtired imageوقتی از سرکار میرسی خونه و داری از خستگی میمیری نمیگیم خیلی خسته ام میگی دارم از خستگی میمیرم در انگلیسی هم به جای (Very tired) بهتر است از (Exhausted) استفاده کنید.❌ She was very tired but couldn&#x27;t sleep.✅ She was exhausted but couldn&#x27;t sleep.11) Richrich imageما در فارسی وقتی میخوایم یه آدم خیلی پولدار رو توصیف کنیم میگیم اون آدم ثروتمنده در انگلیسی هم به جای (Very rich) بهتره (Wealthy) استفاده کنیم.❌ Is he as very rich as you?✅ Is he as wealthy as you?Level IIتا اینجا کلمات پر کاربرد رو گفتیم اما یه سری کلمات دیگه هستن که لااقل کانادایی ها خیلی کمتر استفاده میکنن :))) خلاصه این کلمات حکم Level 2 این داستان رو داره و نشون میده شما یه سخنران بومی هستین.12) Happyhappy image وقتی میخوایم بگیم خیلی خوشحالیم از کلمه مسرور استفاده میکنیم در انگلیسی هم به جای استفاده از (Very happy) بهتر است از (Jubilant) استفاده کنیم.❌ The boy was very happy to be with a dad.✅ The boy was jubilant to be with a dad.10 ) Worriedworried imageتصور کنید شما خیلی نگران دوستتون هستید که امشب دیر کرده و ناگهان دوستتون میاد و شما بهش میگید من دلواپست بودم در انگلیسی هم به جای (Very worried) بهتره از (Anxious) استفاده کنیم.❌ I am very worried about him.✅ I am very anxious about him.13) Thirstythirsty imageتصور کنید شما در بیابانی گرفتار شدید و به شدت تشنه تون هستش شما در اون لحظه عطش دارید در انگلیسی به جای کلمه (Very thirsty) بهتر است از (Parched) استفاده کنیم.البته یادتون باشه این کلمه مثل کلمه ravenous استفاده غیر خوردنی هم داره مثل تشنه یادگیری.❌ Mom i am very thirsty✅  Mom i am parched14) Dirtydirty imageتصور کنید یه گوشی خیلی کثیف روی میزتون افتاده که از شدت کثیفی سبز شده ما تو این حالت میگیم این گوشی چرکه در انگلیسی هم به جای (Very dirty) بهتره از (Squalid) استفاده کنیم.❌ The kitchen is very dirty.✅ The kitchen is squalid.15) Cleanclean imageحالا یه لیوان خیلی تمیز رو روی میزتون تصور کنید که از شدت تمیزی داره برق میزنه تو این لحظه خودمم نمیدونم چی باید بگم تو فارسی پس سریع میگم این لیوان (Spotless) هستش.❌ The glass is very clean.✅ The glass is spotless.</description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Wed, 25 Mar 2020 02:41:07 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش دستورات ترمینال قسمت ۲</title>
                <link>https://virgool.io/learnTermainl/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-%D9%82%D8%B3%D9%85%D8%AA-%DB%B2-pfeek5rstchm</link>
                <description>مقدمه به قسمت دوم آموزش دستورات ترمینال خوش آمدید اگر قسمت قبل را مطالعه نکرده اید پیشنهاد میکنم قسمت اول دستورات ترمینال مطالعه کنید . https://virgool.io/@sadeghbitarafan/hkejmqp5pr5a سخنی با خوانندگان :در ابتدا تشکر میکنم که وقت ارزشمندتون را برای مطالعه آموزش من میگذارید. اگر از آموزش های من خوشتون آمده لطفا با لایک کردن آن از من حمایت کنید تا انگیزه برای تولید آموزش های بیشتر و با کیفیت تر شود ❤️کمی کمک بگیریم با دستور manدستور اولیه: manوظیفه: توضیح دستورات خیلی از ما دستورات ترمینال را برای استفاده روزمره خودمون استفاده میکنیم و از تمام قدرت آن دستور با خبر نیستیم. با استفاده از دستور man پشت هر دستور میتوانید تمام توضیحات ، زیردستورها و... را در مورد آن دستور مطالعه کنید.به عنوان مثال من دستور man ls رو انتخاب کرده ام.همانطور که میبینید تمام زیر دستور ها یا همان subCommand ها دارای توضیح هستند و همه چیز واضح و مبرهن هست.  یک نکته:  اگر به آخر این صفحه اسکرول کنید متوجه میشوید که ترمینال به شما اجازه تایپ نمیدهد برای خارج شدن از این حالت ابتدا :(دو نقطه) را زده سپس حرف q را بنویسید و در نهایت enter را بزنید. ساخت دایرکتوریدستور اولیه: mkdirوظیفه: ساخت دایکتوری توجه کنید شما با دستور mkdir فقط میتوانید دایرکتوری بسازید نه فایل !!این دستور در آدرسی که در حال حاضر هستید دایرکتوری را میسازد به عنوام مثال ابتدا با دستور cd وارد Desktop شدم سپس با دستور (نام دایرکتوری mkdir) دایکتوری را در Desktop ساخته ام.پاک کردن دایرکتوری دستور اولیه: rmوظیفه: پاک کردن فایل ها و دایکتوری ها ما برای پاک کردن چه فایل و چه دایرکتوری از دستور قدرتمند rm استفاده میکنیم.نکته: وقتی شما برای پاک کردن از این دستور استفاده میکنید فایل یا دایکتوری پاک شده به Trash شما انتقال پیدا نمیکند و به صورت کامل از روی هارد پاک میشود پس هنگام استفاده از این دستور مراقب باشید چون برگرداندن اطلاعات پاک شده با این روش بسیار سخت است. شما با استفاده از دستور (نام دایرکتوری rmdir) میتوانید دایکتوری مورد نظر را پاک کنید.اما توجه کنید دستور rmdir فقط برای دایرکتوری هایی هستند که خالی هستند اگر داخل دایرکتوری فایل یا فولدری باشد به شما ارور Directory not empty را میدهد.اگر میخواهید یک دایکتوری را با تمام محتوای داخلش ، مثلا فولدر ها و فایل های پاک کنید میتوانید از دستور (نام دایکتوری rm - R ) استفاده کنید.ساخت فایل دستور اولیه: touch وظیفه: ساخت فایل برای ساخت فایل ابتدا دستور touch را نوشته سپس نام فایل و سپس فرمت مورد نظر را بنویسید این دستور فایل را در مسیر فعلی ایجاد میکند. پاک کردن فایل برای پاک کردن فایل نیز ما از دستور rm استفاده میکنیم به اینصورت که ابتدا دستور rm را مینویسیم و سپس نام فایل و در آخر فرمت فایل را مینویسیم.به پایان قسمت دوم رسیدیم ممنون از وقت با ارزشتون که برای مطالعه من گذاشتید❤️ممنون میشم اگر پیشنهادی دارید در قسمت نظرات بنویسید. https://virgool.io/@sadeghbitarafan/hkejmqp5pr5a </description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Mon, 28 Oct 2019 21:33:37 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش دستورات ترمینال  - قسمت ۱</title>
                <link>https://virgool.io/learnTermainl/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-%D8%AA%D8%B1%D9%85%DB%8C%D9%86%D8%A7%D9%84-%D9%82%D8%B3%D9%85%D8%AA-%DB%B1-hkejmqp5pr5a</link>
                <description>مقدمه سلام به همه علاقه مندان برنامه نویسی :)در این مجموعه آموزشی قرار هست دستورات ترمینال را تقریبا به طور کامل توضیح بدیم امیدوارم آنقدر عاشق ترمینال بشوید که ۹۰ در صد کار های خودتون را با ترمینال انجام بدهید :|سخنی با خوانندگان : در ابتدا تشکر میکنم که وقت ارزشمندتون را برای مطالعه آموزش من میگذارید.نکته : اگر از آموزش های من خوشتون آمده لطفا با لایک کردن آن از من حمایت کنید تا انگیزه برای تولید آموزش های بیشتر و با کیفیت تر شود ❤️لیستدستور اولیه: lsوظیفه: نشان دادن تمام فایل ها در دایرکتوری فعلی توضیح : خیلی موقع ها میشه که ما میخواهیم بدونیم در دایرکتوری که در حال حاضر هستیم چه فولدر ها و فایل هایی وجود دارد ، با استفاده از دستور ls شما میتوانید این کار را انجام دهید .همانطور که میبینید تمام دایکرتوری ها و فایل ها به ما نشان داده شده است اما نه همه ی آنها !!دستور ls فقط به ما چیز هایی را نشان میدهد که پنهان نیستند :/ اگر ما میخواهیم همه فایل های موجود در دایرکتوری را ببینیم از دستور (ls -a) استفاده میکنیم تمام فولدر هایی که با نقطه (dot) شروع شده اند پنهان هستند که ما با این دستور آنها را نیز دیدیم :)کمی عمیق تر در لیست با دستور (ls -l)  شما میتوانید علاوه بر اینکه فایل موجود در دایکتوری را میتوانید ببینید ،  تاریخ و ساعت ایجاد آنها ، مکانی که هستند ، سطح دسترسی آنها را نیز میتوانید ببییند .از سمت چپ سطح دسترسی - مکان فعلی -  تاریخ ، ماه ، ساعت ساخت - نام فایل یا فولدر یک دستور ترکیبی در لیست دستور (ls -la) علاوه بر کارهای بالا فایل های پنهان را نیز اطلاعاتشان را نشان میدهد .اگر میخواهید تمام دستورات را یاد بگیرید دستور (ls --help) در واقع (دستور --help) را بزنید تا به شما زیر مجوعه ها رانشان بدهد  جابجایی در دایرکتوری ها  دستور اولیه: cd وظیفه: جابجایی بین دایرکتوری ها از مسیر فعلیتوضیح: دستور cd مخفف changeDirectory هستش که شما میتوانید بین دایرکتوری ها جابجا شوید .با دستور بالا شما به دسکتاپ جابجا میشوید بعد از آن تا جایی که دایرکتوری موجود باشد میتوانید جابجا شوید . کمی بهتر بنویسیم ما میتوانیم به جای اینکه (نام دایرکتوری cd ) بزنیم میتوانیم پشت سرهم نام دایرکتوری ها را نوشته و یکبار دستور cd را در ابتدا بنویسیم .کمی عمیق تر در جابجایی در دایرکتوری ها  ما تا اینجا فقط به به سمت جلو جابجا میشدیم حالا میخواهیم برگردیم به دایرکتوری قبلی که از آن آمده ایم . با استفاده از دستور ( .. cd ) شما یک مرحله به عقب برمیگردید .اگر هم بخواهید به اولین دایکتوری که سیستم عامل به شما اجازه دسترسی میدهد جابجا شوید دستور (cd)را بزنید .  دستور دایرکتوری فعلی دستور اولیه: pwdوظیفه: نشان دادن مسیر از ابتدا تا دایکتوری فعلی توضیح: شاید با جابجا شدن در دایکتوری ها مسیری که تا به حال آمده اید را فراموش کنید (شایدم نه :) )با استفاده از دستور pwd میتوانید مسیری که طی کرده اید را ببینید.به پایان قسمت اول رسیدیم ممنون از وقتی که برای خواندن مطلب گذاشتید  ❤️ قسمت دوم آموزش دستورات ترمینال وضعیت : در حال آماده سازی </description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Sun, 29 Sep 2019 11:25:50 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش ساخت انیمشن زنجیره ای در سوئیفت</title>
                <link>https://virgool.io/SwiftLearning/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%A7%D9%86%DB%8C%D9%85%D8%B4%D9%86-%D8%B2%D9%86%D8%AC%DB%8C%D8%B1%D9%87-%D8%A7%DB%8C-%D8%AF%D8%B1-%D8%B3%D9%88%D8%A6%DB%8C%D9%81%D8%AA-onaztklvqzl4</link>
                <description>مقدمهبا سلام به همه شما برنامه نویسان عزیز :)امروز قرار هستش با ساخت انیمشن زنجیره ای آشنا بشیم که کمک میکنه تا انیمیشن های چند بخشی بسازیم .شروع مطمئنا شما با ساخت انیمشن های تک بخشی آشنا هستید اما تا به حال فکر کرده اید که اگر بخواهید چند انیمیشن را یکی پس از دیگری اجرا کنید چگونه میشود ؟ما در حالت معمولی اگر بخواهیم به یک view انیمشن بدهیم به اینصورت مینویسیم .UIView.animate(withDuration: 1) {
// Animate your views here
view.frame.origin.x += 1
}در این کد ما فقط یک انیمشن اجرا کردیم و آن هم جابجا کردن فریم ویو به اندازه یک واحد اما ما میخواهیم بعد از جابجا شدن ویو رنگ آن نیز سبز شود :| راه حلی که به ذهن اکثر آدمای تازه کار میرسه احتمالا این هستش UIView.animate(withDuration: 1, animations: { 
view.frame.origin.x += 200
}, completion: { _ in   
UIView.animate(withDuration: 1, animations: {  
view.backgroundColor = .green 
       })
})کاری که کد بالا انجام میده این هستش که در compeletion متود animate دوباره یک انیمشن جدید ایجاد کرده است و رنگ ویو بعد از جابجایی سبز میشود . اما اگر چند حالت دیگر داشته باشیم چطور !!!!خب احتمالا چهره مدیرتون بعد از دیدن کد شما این شکلی میشه :))استفاده از UIView’s animateKeyframes راه حل ما هستش در iOS 7 اپل متودی به نام animateKeyframes معرفی کرد تا بتوان قطعه های انیمشن ساختدر واقع شما با این متود انیمیشن های خود را فریم به فریم میسازید درست مثل  انیمیشن های قدیمی  که فریم به فریم نقاشی میشدند و بعد از آن به هم متصل میشدند پیاده سازی این متود نیازمند زمان انیمشن و تاخیر هستش : حالا وقت این هستش که ما انیمشن های خودمان را اضافه کنیم برای این کار از متود addKeyframe است استفاده میکنیم این متود سه پارامتر اجباری دارد که عبارتند از :زمان شروع فریم (frameStartTime)این پارامتر مشخص میکند که کی قرار هست فریم انیمشن شما اجرا شود ؟ توجه داشته باشید که عدد آن باید بین ۰ تا ۱ باشد. به این معنی که اگر ما زمان انیمشن خود ۵ ثانیه میباشد و میخواهیم این فریم بعد از ۲ ثانیه اجرا شود زمان شروع ما 2/5 (0.4) میشود  زمان فریم (frameDuration)این پارامتر مشخص میکند که فریم شما چقدر باید دوام داشته باشد که این عدد نیز باید بین بازه ۰ تا ۱ باشد اگر مدت زمان انیمشن ما ۵ ثانیه میباشد و میخواهیم ۱ ثانیه دوام داشته باشد ۱/۵ (۰.۲) میشود انیمیشن (animation)این همان بلاک انیمشن هست که شما باید در آن کاری که میخواهید انجام بدهید را بنویسید حالا برای این که انیمشن خود را با keyfame بسازیم باید متود addKeyframe را داخل آن صدا کنیم تا فریم های انیمیشن خود را اضافه کنیم .بعد از استفاده کد نهایی ما به اینصورت میشود :در آخر اگر سوالی داشتید میتونید با استفاده از ایمیل با من در تماس باشید .ایمیل من پایان </description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Fri, 27 Sep 2019 22:24:44 +0330</pubDate>
            </item>
                    <item>
                <title>انتخاب عکس از گالری در سوئیفت</title>
                <link>https://virgool.io/SwiftLearning/%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%D8%B9%DA%A9%D8%B3-%D8%A7%D8%B2-%DA%AF%D8%A7%D9%84%D8%B1%DB%8C-%D8%AF%D8%B1-%D8%B3%D9%88%D8%A6%DB%8C%D9%81%D8%AA-thwwck7pxylh</link>
                <description>مقدمهامروز قرار هست توضیح بدهیم که چگونه عکس را از گالری بگیریم و آن را نمایش بدهیم . شروع با استفاده از سوئیفت ۵ این آموزش را کامل میکنیم ابتدا یک پروژه ایجاد میکنیم و در آن یک UIImage و یک دکمه قرار میدهیم ، کار به اینصورت هست که با استفاده از دکمه به صفحه گالری میرویم و پس از انتخاب ، عکس را در UIImageView قرار میدهیم . در نهایت المنت ها را به کد متصل میکنیم تصویر نهایی این قسمت به صورت زیر میباشد .کمی کد بزنیم ? دو پروتوکل UIImagePickerControllerDelegate , UINavigationControllerDelegate را confirm میکنیم یک Instance از کلاس UIImagePickerController میسازیم let imagePicker = UIImagePickerController()در داخل بدنه دکمه گالری کد زیر را مینویسیم  self.picker.delegate = self
self.picker.sourceType = .photoLibrary
self.present(picker, animated: true, completion: nil)در خط اول باید بگویید به picker که در کدام صفحه گالری را نشان دهد (البته این توضیح کاملی در مورد Delegate نیست و بعدا آن را مفصلا در مقاله ای دیگر توضیح خواهم داد )خط دوم sourceType در واقع یک enum میباشد که سه حالت photo library , saved photo album,camera را دارد savedPhotoAlbum : فقط البوم اصلی گالری را نشان میدهد photolibrary : تمام البوم های موجود در گالری را نشان میدهدcamera : به دوربین متصل میشود منظور از البوم اصلی Camera Roll هستشدر خط سوم هم با استفاده از present کلاس UIImagePickerController را نشان میدهیم (در مقاله های قبلی هم گفته ام معمولا کلاس هایی که به Controller ختم میشوند باید present شوند مثل UIAlertController)  ما اگر روی عکسی کلیک کنیم عملا هیچ اتفاقی نمی افتد چون تعریف نکرده ایم که چه بشود متود didFinishPickingMediaWithInfo را که داخل پروتوکل UIImagePickerControllerDelegate هست را صدا میزنیم ، ما از این متود زمانی استفاده منیم که یک مدیا از گالری انتخاب شده و بعد از آن با آن عملیاتی انجام دهیم میبینید که در این متود info یک دیکشنری میباشد که key آن از جنس UIImagePickerController.InfoKey میباشد و Value آن از جنس ‌Any است حالا داخل بدنه این متود کد زیر را مینویسیمif let originalImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage{
self.imageV.image = originalImage
}
dismiss(animated: true, completion: nil)در خط اول ابتدا با استفاده از همان دیکشنری info کلید  UIImagePickerController.InfoKey.originalImage را وارد میکنیم این کلید در واقع اورجینال عکس انتخاب شده را میدهد ، مثلا شما اگر اجازه crop بدهید و کاربر عکس را . crop کند با این کلید بازهم عکس اوریجینال به شما برمیگرداند کلید های دیگر سپس آن را به عکس cast میکنیم شاید برای شما سوال باشد که if let چیست ما از if let زمانی استفاده میکنیم مطمئن شویم که مقدار آن متغیر هیچ وقت nil نمیشود چه به درد میخوره ؟در همین مثال ممکن است مدیا ای که ما انتخاب میکنیم نتواند به UIImage تبدیل شود در اینصورت به ما nil برمیگرداند و اپ ما کرش میکند ، پس سعی کنید در مواقع اینچنین حتما از nil نبودن مطمئن شوید در آخر گالری را dismis میکنیم به این معنی که صفحه گالری کنار برود به صفحه ی اصلی برگردد نکته مهم : حتما در plist  این کلید ها را وارد کنید ، این برای اجازه دسترسی به گالری و دوربین است&lt;key&gt;NSCameraUsageDescription&lt;/key&gt;
&lt;string&gt;This app wants to take pictures.&lt;/string&gt;&lt;key&gt;NSPhotoLibraryUsageDescription&lt;/key&gt;
&lt;string&gt;This app wants to use your photos.&lt;/string&gt;برای اضافه کردن به plist روی آن کلیک راست کنید و گزینه open as source code را بزنید و داخل دیکشنری کد بالا را پیست کنید پروژه نهایی را از گیتهاب دریافت کنیدhttps://github.com/sadeghgoo/imagepickerپایان </description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Mon, 29 Jul 2019 13:52:08 +0430</pubDate>
            </item>
                    <item>
                <title>توابع Variadic در سوئیفت</title>
                <link>https://virgool.io/SwiftLearning/%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-variadic-%D8%AF%D8%B1-%D8%B3%D9%88%D8%A6%DB%8C%D9%81%D8%AA-pqgduj8pdaqv</link>
                <description>مقدمه در این مقاله قرار هست توضیح بدیم که این گونه از توابع چگونه عمل میکنند شروع بعضی از توابع variadic هستند به این معنی که میتوانند یک پارامتر میتواند بینهایت پارامتر از جنس خود را بپذیرد یک مثال : دقیقا مشابه تابع print که شما هر چند تا پارامتر داشته باشید میتونید بهش پاس بدید و آنها را با با comma (  ,   ) جدا میکنید و آن هم برای شما هر کدام را با فاصله چاپ میکند به کد زیر توجه کنید print(&amp;quothello&amp;quot,&amp;quotIm here&amp;quot,&amp;quotGames&amp;quot)خروجی کد بالا hello im here Gamesاما ما چطور میتوانیم همچین کاری انجام دهیم یک راه بیسیک وجود دارد ، که پارامتر تابع  یک آرایه بگیرید( که رفتار حرفه ای نیست )اما راه دوم استفاده از مدل نوشتاری ...Type مثلا ...String . خب String یک رشته میگیرد اما ...String میتواند چند رشته بگیرد، شاید هزاران رشته !!پارامتر Variadic را سوئیفت به یک آرایه تبدیل میکند و شما میتوانید در آن Iterate یا همان پیمایش کنیدحالا بیاید تابعی با پارامتر Variadic بسازیم  func square(numbers: Int...) {
    for number in numbers {
    print(&amp;quot\(number) squared is \(number * number)&amp;quot)       }
}پارامتر number در اینجا میتواند بیش از یک پارامتر بگیرد در داخل بدنه تابع یک حلقه وجود دارد که در numbers پیمایش میکند و آن را به توان دو میرساند و در آخر چاپ میکند نحوه ورودی دادن به اینگونه توابعsquare(numbers: 1, 2, 3, 4, 5)خروجی1 squared is 12 squared is 43 squared is 94 squared is 165 squared is 25فراموش نکنید ورودی ها را با comma جدا کنید پایان  </description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Sat, 27 Jul 2019 01:47:10 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش ساخت Static Tableview در سوئیفت</title>
                <link>https://virgool.io/SwiftLearning/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B3%D8%A7%D8%AE%D8%AA-static-tableview-%D8%AF%D8%B1-%D8%B3%D9%88%D8%A6%DB%8C%D9%81%D8%AA-xz0wdeehyaax</link>
                <description>مقدمه امروز قرار هست در مورد ساخت Static Tableview یا همان تیبل ویو ایستا صحبت کنیم #کپی رایتهرگونه کپی برداری از این مطلب بدون ذکر نام نویسنده شرعا حرام بوده و در صورت مشاهده چنین موردی از مراجع قضایی پیگیری میکنیمشروع به عکس بالا توجه کنید ۱) چه موقع از تیبل ویو استاتیک استفاده میکنیم ؟۲) فرقی هم با تیبل ویو داینامیک داره ؟پ ۱ ) استفاده های مختلفی داره اما یکی از کاربردها ی آن برای قسمت تنظیمات اپلیکیشن میباشد . پ ۲ ) بله همانطور که از اسم آن مشخص هست داینامیک یعنی متحرک و حالت پویا و غیر ثابت دارد اما استاتیک ساکن است و تغییری نمیکند .شروعتوجه : تیبل ویو استاتیک فقط در UITableViewController  ساخته میشود نه UITableview ابتدا در استوری برد یک UITabelviewController میسازیم دکمه ترکیبی Command + n  پنجره زیر را برای شما باز میکند  اما نکته مهم : شما الان یک TabelviewController دارید اما اگر اپ را اجرا کنید یک صفحه سیاه به شما نشان داده میشود چرا ؟ دلیل این است که شما انتخاب نکردید که initialViewController شما چیست ، یعنی مشخص نکردید که چه صفحه ای در ابتدا قرار است پرزنت شود برای فعال کردن VC کافیه به تب Attribiutes Inspector بروید و چک باکس is initial View Controller را فعال کنید .حالا اگر اپ را اجرا کنید دیگر آن صفحه مشکی را نمیبینید یک راه دیگه برای initial ViewController به Appdelegate بروید و در متود didFinishLaunchingWithOptions کد زیر را اضافه کنید کافیه در withIdentifier نام کلاس VC خود را بنویسید  حالا وقتشه که Cell های تیبدل ویو را بسازیم روی تیبل ویو کلیک کنید سپس Content را در تب Attribiutes Inspector به Static Cells تغییر دهید اگر میخواهید ظاهر زیباتری داشته باشید کافیه Style را به Grouped تغیر دهید تیبل ویو دو بخش دارد یکی به نام Row و یکی به نام Section که row در واقع زیر مجموعه Section هست و Section مانند دسته بندی عمل میکند یک مثال : فرض کنید شما در سبد خریدتان یک سیب یک هویج و یک عدد سبزی جعفری دارید !در اینجا سبد خرید تیبل ویو شما و خرید ها شما  محتویات تیبل ویو شما میباشد اما ما میخواهیم سبد خرید خود را دسته بندی کنیم پس سبزیجات و صیفیجات و میوه ها را دسته بندی میکنیم ،این سه دسته بندی Section های شما و زیر مجموعه های آنها Row های شما میباشدحالا همین مثال را میخوایم در تیبل ویو اجرا کنیم ابتدا section ها را میسازیمدر همان تب Section را به ۳ تغییر دهید برای عنوان دادن به Section ها روی آنها کلیک کنید و در Header عنوان خود را وارد کنید در همین تب ، row را میبینید که با اضافه کردن آن ردیف به شما اضافه میشود تصویر نهایی این قسمتحالا کمی عکس و نوشته به تیبل ویو اضافه میکنیم اضافه کردن عکساضافه کردن لیبل
 ظاهر کلی اپ به اینصورت میباشد تصویر نهایی چگونه عکس به پروژه اضافه کنیم ؟کافیه وارد Assets.xcassets بشوید سپس در سمت چپ کلیک راست کرده و import را انتخاب کنید مسیر عکس تکی یا فولدر را انتخاب کنید در نهایت به پروژه شما اضافه میشود Assets.xcassets نکته : چون تیبل ویو ما از نوع استاتیک هست لازم نیست از طریق کد به UIImageView ها عکس بدهیم به راحتی میتوانید با انتخاب عکس و نام عکس آن را در ImageView جایگذاری کرد  در نهایت برای هر لیبل اسمی انتخاب کنید و عکسها را کامل کنید کار تمام است پروژه نهایی را از گیت هاب دریافت کنید https://github.com/sadeghgoo/StaticTableviewپایان</description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Fri, 26 Jul 2019 15:45:31 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش Mask تصاویر در Sketch</title>
                <link>https://virgool.io/@sadeghbitarafan/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-mask-%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-sketch-xlmufp5xflmy</link>
                <description>مقدمه امروز قرار هست تصاویر خود در اشکال مختلف جاسازی کنیم #کپی رایتهرگونه کپی برداری از این مطلب بدون ذکر نام نویسنده شرعا حرام بوده و در صورت مشاهده چنین موردی از مراجع قضایی پیگیری میکنیمشروعدر ابتدا با استفاده از شورتکات A ، یک آرت برد میسازیم  تا المنت های خودمون را داخلش قرار بدیم سپس عکس را به آرت برد اضافه مکنیم سپس با استفاده از شورتکات r یک مربع میسازیم و روی عکس قرار میدهیم سپس هم مستطیل ساخته شده و عکس را باهم انتخاب میکنیم و  در نوار بالا گزینه mask را انتخاب میکنیم کار تمام است شکل نهایی شما به این صورت میشود شما میتوانید عکس خودتون رو در هر شکلی جاسازی کنید پایان </description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Mon, 22 Jul 2019 13:08:44 +0430</pubDate>
            </item>
                    <item>
                <title>ساخت پروفایل Webclip در چند ثانیه</title>
                <link>https://virgool.io/SwiftLearning/%D8%B3%D8%A7%D8%AE%D8%AA-%D9%BE%D8%B1%D9%88%D9%81%D8%A7%DB%8C%D9%84-webclip-%D8%AF%D8%B1-%DA%86%D9%86%D8%AF-%D8%AB%D8%A7%D9%86%DB%8C%D9%87-itzz2wviz6d6</link>
                <description>مقدمهامروز میخوایم در مورد ساخت برنامه های وب کلیپ صحبت کنیم که به راحتی باچند کلیک میتونید آن را بسازید و در اختیار کاربر قرار بدید #کپی رایتهرگونه کپی برداری از این مطلب بدون ذکر نام نویسنده شرعا حرام بوده و در صورت مشاهده چنین موردی از مراجع قضایی پیگیری میکنیمApple Configurator 2 پروفایل WebClip چیست ؟قبل از هرچیزی باید بگیم webclip چیست ؟ وب کلیپ دقیقا مشابه webview هستش که در اپلیکیشن ها ایجاد میکنیم و url به آن میدهیم و آن را در صفحه ای لود میکند و به ما  نشان میدهد اما پروفایل وب کلیپ چیست ؟ پروفایل وب کلیپ با فرمت MOBILEPROVISION هستش که  وقتی نصب میشوند دقیقا در مسیر پروفایل های اینترپرایز ذخیره میشوند خب من اپلیکیشن وب ویو بسازم که بهتره ؟قسمت جذاب ماجرا اینجاست که شما یک اپلیکیشن وب ویو میسازید بدون اینکه اصلا وارد ایکس کد شوید و بدون اینکه بابت خروجی گرفتن از آن هزینه ای پرداخت کنید چه جوری ؟اپلیکیشن Apple Configurator 2 اینکار رو برای شما انجام میدهد کافیست آن را از اپ استور دریافت کنید البته ساخت وب کلیپ یکی از کارهای این برنامه هستش کاربرد هایی نظیر ساخت پروفایل Resterictions , Passcode,WiFi ,Font و .... دارد لینک دانلود:   Apple Configurator 2 شروعبعد از باز کردن برنامه شما چنین صفحه ای را خواهید دید از نوار ابزار File &gt; New Profile را انتخاب کنید این صفحه پروفایل های شماست که بسته به نیازتون میتونید از هرکدوم استفاده کنید اما در همه این پروفایل های حتما باید قسمت General تکمیل بشه Name :نام پروفایل شما identifier: یو دی ای دی مک شما هست که به طور خودکار پر میشود Organization : نام سازمان Description : توضیحات عمومی پروفایل Consent Message : پیامی که در هنگام نصب پروفایل به کاربر نشان داده میشود Security : اجازه دهد که کاربر پروفایل را پاک کند پیشنهاد میشود همیشه روی همین گزینه باشد Automatically Remove Profile : میتونید زمان بندی کنید که چه زمانی پروفایل پاک شود بعد از کامل کردن مواد بالا نوبت به ساخت پروفایل وب کلیپ میرسه به سمت پایین اسکرول کنید و webclip را انتخاب کنید دکمه configure را بزنید Label :عنوان اپلیکیشن شما URL : آدرس وب سایت Removable : قابلیت پاک کردن اپلیکیشن Icon : ایکون اپلیکیشن precomposed Icon : کاهش جلوه های ایکون FullScreen : تمام صفحه کار تمام است کافیست پروفایل را ذخیره کنید و آن را در هاست یا فضاهای دیگر آپلود کنید و لینک آن را در اختیار کاربران قرار دهید پایان</description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Sun, 21 Jul 2019 16:43:09 +0430</pubDate>
            </item>
                    <item>
                <title>توابع تو در تو یا nested function  در سوئیفت</title>
                <link>https://virgool.io/SwiftLearning/%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AA%D9%88-%D8%AF%D8%B1-%D8%AA%D9%88-%DB%8C%D8%A7-nested-function-%D8%AF%D8%B1-%D8%B3%D9%88%D8%A6%DB%8C%D9%81%D8%AA-amwe9l6nrzfq</link>
                <description>مقدمهما امروز در این مقاله توضیحی در مورد توابع تو در تو یا nested function  خواهیم دادتوابع تو در تو #کپی رایتهرگونه کپی برداری از این مطلب بدون ذکر نام نویسنده شرعا حرام بوده و در صورت مشاهده چنین موردی از مراجع قضایی پیگیری میکنیممدل نوشتاری (syntax) این توابعfunc someFunc(){     
     //statement        
     func anotherFunc(){     
      }
      anotherFunc()  
  }در بالا تابع خارجی را میبینیم (someFunc) که در درون آن تابع anotherFunc قرار دارد لازم به ذکر است که تابع درونی در خارج از بدنه someFunc را نمیتوان call کرد مثال - ۱ تابع تو در تو بدون بازگشت مقداری func outputMessage(_ message:String){
        func greeting(){
        print(&quot;Hello! \(message)&quot;)
        }
        greeting()
   }
outputMesaage(&quot;sadegh&quot;)
خروجی کد بالا به صورت زیر است Hello! sadeghدر تابع outputMessage پارامتر message از جنس string میباشد پس از پر کردن آن، برنامه تابع greeting را صدا میکند و تابع greeting نیز بعد از Hello! پارامتر تابع خارجی را در آن جایگذاری میکند  توجه : شما نمیتوانید تابع greeting را خاج از بدنه تابع outputMessage صدا کنید به توضیحات توجه کنید ما وقتی میخواهیم تابعی بسازیم اون رو با کلمه func مینویسیم و اگر لازم باشید مقدار بازگشتی و پارامتر به آن میدهیم به این تابع نگاه کنید func multiplication(number:Int) -&gt; Int {
return number*2
} مدل نوشتاری تابع بالا به اینصورت هستش (Int)-&gt;(Int)حالا تابعی مینویسیم که دو پارامتر بگیرد و یک عدد برگرداند (Int,Int)-&gt;(Int)فکر میکنم با این مدل نوشتاری آشنا شدید ، حالا به مثال پایین توجه کنید  مثال - ۲ تابع تو در تو با پارامتر و بازگشت مقدار func operate(_ symbol:String) -&gt; (Int,Int) -&gt; (Int){
func plus(num1:Int,num2:Int)-&gt;Int{
return num1 + num2
}
func subtraction(num1:Int,num2:Int) -&gt; Int{
return num2 - num1
}
let operation = symbol == &quot;+&quot; ? plus : subtraction
return operation
}
let op = operate(&quot;-&quot;)
let rea = op(2, 7)
print(rea)اگر نگاهی به تابع بندازیم تابع operate را میبینیم که یک پارامتر دارد از جنس String اما به مقدار بازگشتی آن توجه کنید در واقع مقدار بازگشتی آن یه تابع است که دو پارامتر از جنس Int دارد و به ما یک Int برمیگرداند یعنی عملا در خط اول ما دو تابع با شکل های نوشتاری متفاوت میبینیمحالا دو تابع جمع و تفریق  که هر دوی این توابع در ورودی خود دو عدد میگیرند یک Int برمیگردانند اما شاید در کد بالا یک چیز جدید دیده باشید و آن هم این استlet operation = symbol == &quot;+&quot; ? plus : subtraction کد بالا را TernaryOperator میگویند دقیقا مانند دستور شرطی if هست اما مدل کوتاه تر آن هست در این کد میگوییم اگر symol برابر &quot;+&quot;  بود ،تابع plus را صدا کن و مقدارش را در operation بریز  ،اگر غیر از این بود تابع subtraction را صدا کن و مقدارش را در operation بریز مدل نوشتاری همچین دستور شرطی چگونه است  ؟ به کد زیر دقت کنید let res = اگر شرط درست نبود : اگر شرط درست بود  ?  مقدار اما شاید برای شما سوال پیش بیاید که چرا در کد بالا توابع بدون پارامتر هاشون صدا شدن ، سوال خوبی است جواب : چون تابع بیرونی (operate) یک تابع برمیگرداند که دقیقا باید مقدار خروجی تابع بیرونی با پارامتر و خروجی تابع درونی یکی باشه  البته شما به غیر از مدل صدا کردن بالا به این صورت هم میتونید صدا کنید let operation = symbol == &quot;+&quot; ? plus(num1:num2:) : subtraction(num1:num2: )به بحث برمیگردیمlet operation = symbol == &quot;+&quot; ? plus : subtraction 
return operation  حالا ما operation را برمیگردانیم که از جنس زیر هستش(Int,Int)-&gt;(Int)حالا وقته صدا کردن تابع و کار با آن است let op = operate(&quot;+&quot;)let rea = op(2, 7)print(rea) متغیری به نام op تعریف میکنیم ، حالا operate را صدا میزنیم و پارامتر آن را پر میکینیم ، اگر یادتون باشه operate تابع (Int,Int)-&gt;(Int) را برمیگرداند که همین تابع داخل op ریخته میشه ، بعد از آن متغیری به نام rea میسازیم و در آ تابع op که گفتم بالا از جنس چی هست رو مقدار میدهیم op هم یک . Int برمیگرداند و داخل rea  میریزد و در آخر ما آن را چاپ میکنیم سخنی با برنامه نویسان این رو به دوستان عزیز بگم که هر اگر هرکدوم از این بحث های برنامه نویسی رو متوجه نشدید اصلا نا امید نشید شما حتما یکی از بهترین برنامه نویس ها هستید فقط باید هوشمند و مکرر تلاش کنید </description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Sun, 21 Jul 2019 11:51:15 +0430</pubDate>
            </item>
                    <item>
                <title>دانلود برنامه های مک به صورت رایگان</title>
                <link>https://virgool.io/appleInfo/%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D9%85%DA%A9-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-mxtfjig7qr8g</link>
                <description>مقدمه  امروز میخوام منبعی عالی برای دانلود برنامه و البته بازی های مک به شما معرفی کنم وب سایت Macbedmacbed.comنکته : متاسفانه این سایت فیلتره و خودتون راهش رو میدونید ? خب با مراجعه به سایت Macbed میتونید به منبع عظیمی از اپلیکیشن و بازی ها (کرک شده) دسترسی داشته باشیدشروعمن یه برنامه تصادفی انتخاب کردم تا نحوه دانلودش را به شما توضیح بدم لینک برنامه  : https://www.macbed.com/snippetslab-1-9/به سمت پایین اسکرول کنید و روی دکمه دانلود بزنید توجه کنید چند تا دکمه دانلود هست که این اصلی هستش بقیه آنها تبلیغاتی هستند دکمه دانلود بعد از اون صفحه ای به شما نشون داده میشه که اپلیکیشن ها در اپلودسنتر های مختلف مثل nitroflare و .. آپلود شده اند ، شما دو راه دارید راه اول - استفاده از حالت رایگان برای دانلود از اپلود سنتر ها  هست که تبلیغات اعصاب خردکن و سرعت پایین و ... دارد اما راه دوم چیست ؟راه دوم - با استفاده از سایت https://parsget.com/  شما میتونید از هر اپلود سنتری دانلود کنید بدون اینکه در اونها اشتراک داشته باشید و از سرعت دانلود بالا لذت ببرید (البته پارس گت امکانات دیگه هم داره که میتونید مطالعه کنید )نحوه دانلود به چه صورت هستش ؟کافیه لینک صفحه یکی از اپلود سنتر ها رو کپی کنید و در پنل پارس گت پیست کنید و روی دانلود بزنید پنل پارس گت حالا پارس گت برای شما آن را دانلود میکند و در پنل تون نمایش میده و اون رو میتونید دانلود کنید نکته مهم : پارس گت ممکنه در بعضی از ساعات نتونه از بعضی اپلود سنتر ها دانلود کنه پس اگر دیدید یکی از اونها دانلود نشد بقیه اپلود سنتر ها رو حتما امتحان کنید اگر باز هم مشکلی داشتید در قست نظرات بنوسید پاسخگو هستمپایان</description>
                <category>صادق بیطرفان</category>
                <author>صادق بیطرفان</author>
                <pubDate>Sat, 20 Jul 2019 14:18:26 +0430</pubDate>
            </item>
            </channel>
</rss>