2017-07-06 16 views
0
@IBAction func followUser(_ sender: Any) { 
    if followBtn.titleLabel?.text == "Follow"{ 
     print("will follow") 
    } else if followBtn.titleLabel?.text == "Following"{ 
    } 
} 

これを行うには良い方法がありますか?私はロード時に実行される関数を持っており、ユーザーがフォローされているかどうかをチェックし、ボタンのテキストを変更します。もちろん、ボタンが「フォロー」と表示されている場合は、「フォロー」と表示されているボタンとは異なる機能を持ちます。これが唯一の方法ですか?それは間違っていると感じる。ボタンを区別するためのより良い方法Swift?

func checkFollowing(){ 

    let url = URL(string: "xxx") 

    //request to this file 
    var request = URLRequest(url: url!) 

    //method to pass data 
    request.httpMethod = "POST" 

    //body to be appended to url 
    let body = "id=\(user?["id"] as! String)&follower_id=\(imageID)" 
    request.httpBody = body.data(using: String.Encoding.utf8) //multi language support 

    //launching 
    URLSession.shared.dataTask(with: request, completionHandler: { (data:Data?, response:URLResponse?, error:Error?) in 


     if error == nil{ 


      //communicate back to UI 
      DispatchQueue.main.async(execute: { 

       do{ 

        //get json result 
        let json = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions .mutableContainers) as? 
        NSDictionary 

        //assign json to a new var parseJSON in guard secured way 
        guard let parseJSON = json else{ 

         print("error while parsing") 
         return 
        } 


        if parseJSON["status"] as! String == "1"{ 
         self.followBtn.setTitle("Following", for: .normal) 
         self.followBtn.backgroundColor = UIColor(red: 32, green: 113, blue: 165, alpha: 0.5) 
        } else if parseJSON["status"] as! String == "0"{ 
         self.followBtn.setTitle("Follow", for: .normal) 
        } 


       } catch{ 

        print("Caught an error: \(error)") 

       } 

      }) 

      //if unable to proceed with request 

     } else{ 

      print("error: \(error)") 


     } 

     //launch prepared session 
    }).resume() 
} 
+1

フォロー/フォローを扱うデータソースがありますか? – Starlord

+2

ユーザーがまだフォローしているかどうかを教えてくれるのはなぜボタンの仕事ですか?これは、ボタンがするべきことではありません。 – Alexander

+0

ビューをデータ保存の方法として使用しないでください。ボタンのテキストを決定する関数は何ですか?それは良い出発点になるだろう。 –

答えて

0

コントローラの変数を使用して状態を追跡する方が適切です。

あなたはそれが、オプションで暗黙的に開封されたオプション、またはデフォルト値を設定したいかどうかまで
var isFollowing: Bool! 

// ------------------------------- 

if parseJSON["status"] as! String == "1"{ 
    self.followBtn.setTitle("Following", for: .normal) 
    self.followBtn.backgroundColor = UIColor(red: 32, green: 113, blue: 165, alpha: 0.5) 
    self.isFollowing = true 
} else if parseJSON["status"] as! String == "0"{ 
    self.followBtn.setTitle("Follow", for: .normal) 
    self.isFollowing = false 
} 

// ------------------------------- 

@IBAction func followUser(_ sender: Any) { 
    if self.isFollowing { 
     // whatever happens when you're already following 
    } else { 
     print("will follow") 
    } 
} 

(が、あなたは定期的なオプションを使用する場合はもちろん、あなたは最後の部分のためにそれをアンラップする必要があります)

+0

'isFollowing'をオプションにするのはなぜですか?ちょうどデフォルト値を与えてください。 – rmaddy

関連する問題