ارور های مربوط به swift ۳
با سلام و احترام
فککنم تا وقتی که سری جدید آموزشها برای سویفت ۳ آماده بشه این پست باز بمونه خیلی بدرد بخوره . ممنون میشم توجه ویژه ای به این پست داشته باشید
با تشکر
۱- میشه بفرمایید این ارور برای چیه؟ به هر شکل تغییرش میدم حل نمیشه

۲- ضمنا همین ارور اینجا هم هست انگار با swift 3 باید به شکل دیگه ای باشه

این کد را به این شکل تغییر دهید :
بخش مربوط به تبدیل JSON در انتها به جای NSDictionary از [String:Any] استفاده کنید .
این کدهای برنامه
import UIKit
class ViewController2: UIViewController
{
//Our web service url
@IBOutlet weak var label: UILabel!
override func viewDidLoad()
{
let URL_GET_TEAMS = URL(string: "http://....ir/wp/api/get_tag_index")
// Do any additional setup after loading the view, typically from a nib.
let session = URLSession.shared
let task = session.dataTask(with: URL_GET_TEAMS!, completionHandler:
{ (data, response, error) -> Void in
do {
let teamJSON = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
let statusCode = (response as! HTTPURLResponse).statusCode
print(statusCode)
let someArray = teamJSON
let posts = someArray ["tags"] as! NSArray
let statusName:String = posts [0]["title"] as! String
DispatchQueue.main.async(execute: { () -> Void in
self . label . text = statusName
print (teamJSON)
})
}
catch
{
print("Error")
}
})
task.resume()
}
}
اینم کدهای جیسون
{"status":"ok","count":5,"tags":[{"id":12,"slug":"%d8%a8%d8%b1%da%86%d8%b3%d8%a8-%d9%88%db%8c%da%98%d9%87",
"title":"\u0628\u0631\u0686\u0633\u0628 \u0648\u06cc\u0698\u0647","description":"","post_count":3},
{"id":8,"slug":"%d8%aa%d8%b3%d8%aa","title":"\u062a\u0633\u062a","description":"","post_count":2},
{"id":10,"slug":"%d8%aa%d8%b5%d9%88%db%8c%d8%b1","title":"\u062a\u0635\u0648\u06cc\u0631","description":"","post_count":1},
{"id":9,"slug":"%d8%b5%d8%af%d8%a7","title":"\u0635\u062f\u0627","description":"","post_count":1},
{"id":11,"slug":"%d9%81%d8%a7%db%8c%d9%84","title":"\u0641\u0627\u06cc\u0644","description":"","post_count":1}]}
داده شما که قرار است از متغیر posts خوانده شود یک NSDictionary یا همان [String, Any]است .
پس باید قبل از خواندن آن و تبدیل به String آن را به NSDictionary تبدیل کنید :
let statusName = (posts[0] as! NSDictionary)["title"] as! String
از آنجا که شما آرایه ای از tag ها را دارید پس بهتر است از For استفاده کنید .
با سلام و احترام
من وقتي خروجي از jsone ميگيرم و پرينت هم ميكنم مشكلي نيست
ولي وقتي ميخوام آرايه گرفته شده رو منتقلش كنم داخل tableViewCell كه از آرايه شماره 2 تغزيه ميشه ، نميشه و محتويات اوليه آرايه شماره 2 رو نشون ميده
البته اروري هم نميده ولي گويا راه خاصي بايد داشته باشه تا از تابع جيسون اطلاعات رو پاس بديم به بيرون از تابع
ممنون ميشم راهنمايي بفرماييد
با تشكر
خیر این مشکل رو حل نکرد
در واقع من یه کلاس برای جیسون ایجاد کردم و وقتی میخوام خروجی رو از جیسون به صورت آرایه بگیرم نمیتونم
در داخل کلاس جیسون میتونم پرینت کنم آرایه جدید رو
ولی وقتی میخوام از کلاس UIViewController اطلاعات آرایه جیسون رو بخونم مجبور شدم خارج از فانکشن خود جیسون آرایه جدیدی تعریف کنم و اونو مقدار اولیه بدم و بعد داخل فانکشن جیسون مقدار جدید بدم
بعد که میخوام مقدار دهی جدید رو در تکست باکس استفاده کنم مقدار اولیه آرایه رو میده
در صورتی که من با ()print میتونم اطلاعات جدید رو ببینم
در ذیل کلاس مربوط به جیسون رو گذاشتم
import UIKit
class JSON{
internal var URL_Json = URL(string: "http://....ir/wp/api/get_tag_index")
internal var str_someArray = "posts"
internal var str_somePosts = "title"
// private var array_Posts:Array = ["test1","test2"]
func json(str_someArray:String , str_somePosts:String) {
let session = URLSession.shared
let task = session.dataTask(with: URL_Json!, completionHandler:
{ (data, response, error) -> Void in
do {
let teamJSON = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
let someArray = teamJSON
let posts = someArray [str_someArray] as! NSArray
let count = (posts . count)
for i in 0 ..< count
{
DispatchQueue.main.async(execute:{ () -> Void in
// self.array_Posts.append (( posts [i] as! NSDictionary)[str_somePosts]as! String)
var array_Posta:Array = ["test1", "test2"]
array_Posta.append (( posts [i] as! NSDictionary)[str_somePosts]as! String)
})
}
}
catch
{
print("Error")
}
})
task.resume()
}
}
در واقع چطور در توابع مربوط به ویو کنترلر میشه از خروجی جیسون استفاده کرد؟ من به هر شکلی که به فکرم میرسید تست کردم ولی از جیسون نمیخونه
نه count رو و نه محتویات آرایه رو
در توابع ذیل میخوام از جیسون استفاده کنم
func numberOfSections(in tableView: UITableView) -> Int {
}
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
}
با سلام و احترام
من قصدم ایجاد اپلیکیشنی برای یک وب سایت هست که بتونم تصاویر و مطالب اون رو استخراج کنم و ضمنا مواردی مثل عضویت و سفارش و ... هم داشته باشه
برای چنین هدفی راهکار JSON راهکار منطقی میتونه باشه؟؟؟
من قسمت دانلودرها رو مطالعه کردم بسیار مفید و کارامد و عالی توضیح داده شده ولی این مشکل من قسمت مزبور حل نمیشه اما همونطور که فرمودید قسمت protocol فکر میکنم درمان این موضوع باشه
من خواستم ضمن ایجاد یک protocol و سعی در ارسال داده های کلاس Json به protocol و دریافت اون درViewController مشکلم رو حل کنم ولی باز هم نشد
گویا کلا داده های جیون رو در ViewController نمیشه داشت
import UIKit
class JSON{
internal var URL_Json = URL(string: "http://logowall.ir/wp/api/get_posts/")
internal var str_someArray = "posts"
internal var str_somePosts = "title"
// private var array_Posts:Array = ["test1","test2"]
func json(str_someArray:String , str_somePosts:String) {
let session = URLSession.shared
let task = session.dataTask(with: URL_Json!, completionHandler:
{ (data, response, error) -> Void in
do {
let teamJSON = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:Any]
let someArray = teamJSON
let posts = someArray [str_someArray] as! NSArray
let count = (posts . count)
for i in 0 ..< count
{
DispatchQueue.main.async(execute:{ () -> Void in
// self.array_Posts.append (( posts [i] as! NSDictionary)[str_somePosts]as! String)
var array_Posta:Array = ["test1", "test2"]
array_Posta.append (( posts [i] as! NSDictionary)[str_somePosts]as! String)
})
}
}
catch
{
print("Error")
}
})
task.resume()
}
}
درود خدمت دوستان . من بعد از به روز رسانی xcode سیستمم به آخرین نسخه و بالا آوردن پروژه روی swift 3 وقتی پروژه رو باز کردم با #وارنینگ های زیادی در قسمت گرافیکی برخورد کردم که برخی هاشون اصلا ربطی مثلا به موارد دستی ندارند مثلا روی ( نویگیشن کنترلر ) ارور وارنینگ دارد . در صورتی که اصلا این بخش توش گرافیک نمی ره که من دست زده باشم و هرچی روی اون مثلث زرد می زنم و فیکس فریم می کنم این مشکل حل نمی شه این ارور در سراسر پروژه من متسفانه پیدا شده که در صورت کمک دوستان بتونم حلش کنم کمک بسیار زیادی بهم می شه
پروژه من خیلی بزرگ شده و اینکه از اول بزنمش خیلی سخت می شه مخصوصا تمام تلاشم روی بخش گرافیکش بود که واقعا هم زیبا شده و الان نمی دونم باید باهاش چیکار کنم این همه وارنینگ گرافیکی مربوط به اینترفیس حل بشه.
تذکر : اگر مثل من تو نسخه قبلی تمام اسکچ بخش هایی که باید درست بکنین رو روی خود xcode انجام دادید و اون بخش ها به بخش های دیگر مرتبط نیست یا همان خالی هست باید بگم بعد از به روز رسانی خود xcode پاکش می کنه متاسفانه
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
