অবজেক্টিভ-সিতে ইক্যুয়ালটোস্ট্রিংয়ের সুইফ্ট সমতুল্য কত?


271

আমি নীচে কোড চালানোর চেষ্টা করছি:

import UIKit

class LoginViewController: UIViewController {

@IBOutlet var username : UITextField = UITextField()
@IBOutlet var password : UITextField = UITextField()

@IBAction func loginButton(sender : AnyObject) {

    if username .isEqual("") || password.isEqual(""))
    {
        println("Sign in failed. Empty character")
    }
}

আমার আগের কোডটি উদ্দেশ্য-সি-তে ছিল, যা ভাল কাজ করছিল:

 if([[self.username text] isEqualToString: @""] ||
    [[self.password text] isEqualToString: @""] ) {

আমি ধরে নিয়েছি আমি সুইফটে ব্যবহার করতে পারি না isEqualToString। কোন সাহায্য প্রশংসা করা হবে।

উত্তর:


427

সুইফ্টের সাথে আপনার সাথে সমতাটি পরীক্ষা করার দরকার নেই isEqualToString

আপনি এখন ব্যবহার করতে পারেন ==

উদাহরণ:

let x = "hello"
let y = "hello"
let isEqual = (x == y)

এখন isqual হয় true


37
===পরিচয় অপারেটর যেখানে ==সমতা অপারেটর ( isEqual:এনএসওজেক্ট এবং এর সাবক্লাসে ডিফল্ট কল দ্বারা )
ব্রায়ান চেন

3
হ্যাঁ, দুঃখিত, "সমতা", পরিচয় নয়। ভুল শব্দ :)
জেজেস্কোলো

1
তবে, যতক্ষণ না আমি কিছু মিস করছি, আপনি স্ট্রিংস: এর মধ্যে পরিচয়টি পরীক্ষা করতে পারবেন বলে মনে হয় না 'String' does not conform to protocol 'AnyObject'

3
@ user1040049 আপনি স্ট্রিংকে === অপারেটর ব্যবহার করে তুলনা করতে পারবেন না কারণ স্টিফ্ট স্ট্রিংটি স্ট্রাক্ট শ্রেণীর নয় struct আপনি যদি নিজের পাঠ্য / স্ট্রিংটিকে এনএসএস স্ট্রিং হিসাবে কাস্ট করেন তবে আপনি === অপারেটর ব্যবহার করে তুলনা করতে পারবেন।
সানজানা

3
@ জেজেসাকোলো আপনি সত্যিকারের পরিচয় অংশের সাথে সত্যই বিভ্রান্ত করছেন। Stringতুলনা সম্পর্কে এই প্রশ্ন । Binary operator '===' cannot be applied to two String operands
এক্সকোড

47

এর পরিবর্তে == অপারেটর ব্যবহার করুনisEqual

স্ট্রিং তুলনা

স্ট্রিং মানগুলির সাথে তুলনা করার জন্য সুইফট তিনটি উপায় সরবরাহ করে: স্ট্রিং সমতা, উপসর্গ সমতা এবং প্রত্যয় সমতা।

স্ট্রিং সমতা

দুটি স্ট্রিংয়ের মানগুলি সমান হিসাবে বিবেচিত হয় যদি তারা একই ক্রমে ঠিক একই অক্ষর ধারণ করে:

let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lot alike, you and I."
if quotation == sameQuotation {
    println("These two strings are considered equal")
}
// prints "These two strings are considered equal"
.
.
.

আরও পড়ার জন্য সুইফ্টের সরকারী ডকুমেন্টেশন (অনুসন্ধানের স্ট্রিংগুলি অনুসন্ধান করুন)


13

আমি @JJSaccoloউত্তর দেওয়ার পাশাপাশি , আপনি equalsনতুন স্ট্রিং এক্সটেনশন হিসাবে কাস্টম পদ্ধতি তৈরি করতে পারেন যেমন:

extension String {
     func isEqualToString(find: String) -> Bool {
        return String(format: self) == find
    }
}

এবং ব্যবহার:

let a = "abc"
let b = "abc"

if a.isEqualToString(b) {
     println("Equals")
}

নিশ্চিতরূপে আসল অপারেটরটি ==আরও ভাল হতে পারে (জাভাস্ক্রিপ্টের মতো কাজ করে) তবে আমার জন্য isEqualপদ্ধতিটি এমন কিছু কোডের স্পষ্টতা দেয় যা আমরা স্ট্রিংগুলির সাথে তুলনা করি

আশা করি এটি কারও সাহায্য করবে,


8

সুইফটে, == অপারেটরটি উদ্দেশ্য সি এর আইজুয়েলের সমতুল্য: পদ্ধতি (এটি কেবল পয়েন্টারগুলির সাথে তুলনা করার পরিবর্তে আইজুয়াল পদ্ধতিটিকে কল করে এবং পয়েন্টারগুলি একই বলে পরীক্ষার জন্য একটি নতুন === পদ্ধতি রয়েছে), সুতরাং আপনি কেবল লিখতে পারেন এটি হিসাবে:

if username == "" || password == ""
{
    println("Sign in failed. Empty character")
}

যখন এটি দ্রুতগতিতে কাজ করে - এটি / যখন ব্যবহারকারীর নাম শূন্য থাকে তখন এটি অজব্যাকে বিপর্যয় সৃষ্টি করবে। উপরে প্রস্তাবিত হিসাবে - ব্যবহারকারীর নাম.আইএসপি ব্যবহার করুন এবং কোথাও উদ্দেশ্য সি এর জন্য সমপরিমাণ এমপি ম্যাক্রো রয়েছে।
জনডপপ

সুইফটে, ব্যবহারকারী নামটি স্ট্রিং হিসাবে ঘোষণা না করা পর্যন্ত? (ওরফে ptionচ্ছিক <স্ট্রিং>) তাহলে এটি শূন্য করা যাবে না। অবজেক্টিভ সি তে আপনি কেবলমাত্র বলতে পারেন যদি ([ব্যবহারকারীর দৈর্ঘ্য] == 0 || [পাসওয়ার্ডের দৈর্ঘ্য] == 0) {...} শূন্য বা খালি কেসগুলি কভার করতে)।
নিক লকউড

6

প্রকৃতপক্ষে, এটি মনে হয় যে সুইফ্ট স্ট্রিংগুলিকে কম বস্তুগুলির মতো এবং আরও বেশি মানের হিসাবে বিবেচনা করার জন্য প্রচার করার চেষ্টা করছে। তবে এর অর্থ হুড সুইফ্টের নীচে এই স্ট্রিংগুলিকে বস্তু হিসাবে বিবেচনা করে না, যেমনটি নিশ্চিত যে আপনি সকলেই লক্ষ্য করেছেন যে আপনি এখনও স্ট্রিংগুলিতে পদ্ধতিগুলি আহ্বান করতে পারেন এবং তাদের বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন।

উদাহরণ স্বরূপ:-

//example of calling method (String to Int conversion)
let intValue = ("12".toInt())
println("This is a intValue now \(intValue)")


//example of using properties (fetching uppercase value of string)
let caUpperValue = "ca".uppercaseString
println("This is the uppercase of ca \(caUpperValue)")

অবজেক্টসি তে আপনি স্ট্রিং অবজেক্টের রেফারেন্সটি একটি ভেরিয়েবলের মাধ্যমে পাস করতে পারতেন, তার উপরে কল করার পদ্ধতিগুলির উপরে, যা স্ট্রিংগুলি খাঁটি অবজেক্টস এই সত্যটি প্রতিষ্ঠিত করে।

স্ট্রিংকে অবজেক্ট হিসাবে দেখার চেষ্টা করার সময় এই ধরাটি ধরা পড়ে, তীব্রভাবে আপনি কোনও ভেরিয়েবলের মাধ্যমে রেফারেন্স দিয়ে স্ট্রিং অবজেক্টটি পাস করতে পারবেন না। সুইফট সর্বদা স্ট্রিংয়ের একটি নতুন কপিটি পাস করবে। অতএব, স্ট্রিংগুলি সুইফটিতে মান ধরণের হিসাবে বেশি পরিচিত। আসলে, দুটি স্ট্রিং লিটারেল অভিন্ন হবে না (===)। এগুলি দুটি পৃথক অনুলিপি হিসাবে বিবেচিত হয়।

let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")

আপনি দেখতে পাচ্ছেন যে আমরা স্ট্রিংকে অবজেক্ট হিসাবে ভাবার এবং প্রচলিত মানগুলির মতো আচরণ করার প্রচলিত পদ্ধতি থেকে পথ ভাঙতে শুরু করি। সুতরাং .isEqualToString যা স্ট্রিং অবজেক্টগুলির জন্য পরিচয় অপারেটর হিসাবে বিবেচিত হয়েছিল তা আর বৈধ নয় কারণ আপনি কখনও সুইফটে দুটি অভিন্ন স্ট্রিং অবজেক্ট পেতে পারবেন না। আপনি কেবল এর মান তুলনা করতে পারেন, বা অন্য কথায় সমতা (==) যাচাই করতে পারেন।

 let NotSoCuriousAnyMore = ("ca" == "ca")
 println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")

আপনি যখন দ্রুতগতিতে স্ট্রিং অবজেক্টগুলির পরিব্যক্তিটি দেখুন তখন এটি আরও আকর্ষণীয় হয়। তবে আরেকটি প্রশ্নের জন্য, আর একদিন। আপনার সম্ভবত এমন কিছু বিষয় লক্ষ্য করা উচিত যা এর সত্যই আকর্ষণীয় করে তোলে। :) আশা করি যা কিছু বিভ্রান্তি দূর করে দেয়। চিয়ার্স!


4

ইউআইটিেক্সটফিল্ডের পাঠ্য তুলনার জন্য আমি নীচের কোডটি ব্যবহার করছি এবং আমার জন্য ভাল কাজ করছি, যদি কোনও ত্রুটি খুঁজে পান তবে আমাকে জানান know

if(txtUsername.text.isEmpty || txtPassword.text.isEmpty)
{
    //Do some stuff
}
else if(txtUsername.text == "****" && txtPassword.text == "****")
{
    //Do some stuff
}

3

সুইফটে isEmptyফাংশনে এটি স্ট্রিং ফাঁকা আছে কিনা তা পরীক্ষা করবে।

 if username.isEmpty || password.isEmpty {
      println("Sign in failed. Empty character")
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.