Apa arti dari baris kode ini?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
The ?
dan :
membingungkan saya.
variable ?: anotherVariable
, apa artinya ini? '
(valOrVar != 0) ? valOrVar : anotherValorvar
Apa arti dari baris kode ini?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
The ?
dan :
membingungkan saya.
variable ?: anotherVariable
, apa artinya ini? '
(valOrVar != 0) ? valOrVar : anotherValorvar
Jawaban:
Ini adalah operator ternary C (Objective-C adalah superset dari C):
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
secara semantik setara dengan
if(inPseudoEditMode) {
label.frame = kLabelIndentedRect;
} else {
label.frame = kLabelRect;
}
Terner tanpa elemen pertama (mis. variable ?: anotherVariable
) Berarti sama dengan(valOrVar != 0) ? valOrVar : anotherValOrVar
?:
) bahkan lebih baik dalam situasi di mana sisi kiri adalah ekspresi, karena ?:
mencegahnya dievaluasi lebih dari sekali. Misalnya: [myArray firstObject] ? [myArray firstObject] : @"Hello World";
panggilan firstObject
dua kali (jika firstObject
tidak kembali nil
), di mana [myArray firstObject] ?: @"Hello World";
menghasilkan hasil yang identik tetapi tidak pernah memanggil firstObject
lebih dari satu kali.
?:
juga disebut operator Elvis karena kemiripan emoji dengan penyanyi. Dan tentu saja dalam kasus ini karena kita menjatuhkan satu elemen, itu bukan lagi operator ternary tetapi operator biner . Operator biner meliputi sebagian besar operator biasanya kita gunakan ketika pemrograman ( *
, +
, -
, ^
, |
, ||
, &
, >>
, dll).
Sederhananya, logikanya
(condition) ? {code for YES} : {code for NO}
Membangun penjelasan luar biasa Barry Wark ...
Apa yang begitu penting tentang operator ternary adalah ia dapat digunakan di tempat-tempat yang jika tidak bisa tidak. yaitu: Di dalam parameter kondisi atau metode.
[NSString stringWithFormat: @"Status: %@", (statusBool ? @"Approved" : @"Rejected")]
... yang sangat berguna untuk konstanta preprosesor:
// in your pch file...
#define statusString (statusBool ? @"Approved" : @"Rejected")
// in your m file...
[NSString stringWithFormat: @"Status: %@", statusString]
Ini menghemat Anda dari keharusan menggunakan dan melepaskan variabel lokal dalam pola if-else. FTW!
Itu hanya operator ternary biasa . Jika bagian sebelum tanda tanya itu benar, ia mengevaluasi dan mengembalikan bagian sebelum titik dua, jika tidak ia mengevaluasi dan mengembalikan bagian setelah titik dua.
a?b:c
seperti
if(a)
b;
else
c;
Ini adalah bagian dari C, jadi tidak spesifik Objective-C. Berikut ini terjemahan ke dalam if
pernyataan:
if (inPseudoEditMode)
label.frame = kLabelIndentedRec;
else
label.frame = kLabelRect;
Ini hanya bentuk singkat dari penulisan pernyataan if-then-else. Artinya sama dengan kode berikut:
if(inPseudoEditMode)
label.frame = kLabelIndentedRect;
else
label.frame = kLabelRect;
Contoh operator ternary. Jika nilai variabel boolean isFemale adalah YA, cetak "GENDER IS FEMALE" jika tidak, "GENDER IS MALE"
? means = execute the codes before the : if the condition is true.
: means = execute the codes after the : if the condition is false.
Objektif-C
BOOL isFemale = YES; NSString *valueToPrint = (isFemale == YES) ? @"GENDER IS FEMALE" : @"GENDER IS MALE"; NSLog(valueToPrint); //Result will be "GENDER IS FEMALE" because the value of isFemale was set to YES.
Untuk Swift
let isFemale = false let valueToPrint:String = (isFemale == true) ? "GENDER IS FEMALE" : "GENDER IS MALE" print(valueToPrint) //Result will be "GENDER IS MALE" because the isFemale value was set to false.
Fakta menyenangkan, di objektif-c jika Anda ingin memeriksa null / nil Misalnya:
-(NSString*) getSomeStringSafeCheck
{
NSString *string = [self getSomeString];
if(string != nil){
return String;
}
return @"";
}
Cara cepat untuk melakukannya adalah:
-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString] != nil ? [self getSomeString] : @"";
}
Kemudian Anda dapat memperbaruinya dengan cara paling sederhana:
-(NSString*) getSomeStringSafeCheck
{
return [self getSomeString]?: @"";
}
Karena dalam Objective-C:
Jadi katakanlah Anda menulis:
[self getSomeString] != nil?: @"";
parameter kedua mengembalikan nilai boolean, dengan demikian pengecualian dilemparkan.
Ini adalah operator ternary, seperti pernyataan if / else.
if(a > b) {
what to do;
}
else {
what to do;
}
Dalam operator ternary seperti itu: kondisi? apa yang harus dilakukan jika kondisinya benar: apa yang harus dilakukan jika itu salah;
(a > b) ? what to do if true : what to do if false;
Saya baru belajar sesuatu yang baru tentang operator ternary. Bentuk pendek yang menghilangkan operan tengah benar-benar elegan, dan merupakan salah satu dari banyak alasan bahwa C tetap relevan. FYI, saya pertama kali benar-benar memahami hal ini dalam konteks rutin yang diimplementasikan dalam C #, yang juga mendukung operator ternary. Karena operator ternary berada dalam C, maka dapat dipastikan bahwa itu akan menjadi bahasa lain yang pada dasarnya adalah ekstensi daripadanya (misalnya, Objective-C, C #).
Seperti semua orang menyebutnya, Ini adalah cara untuk mewakili operator bersyarat
if (condition){
true
}
else {
false
}
menggunakan operator ternary (condition)? true:false
Untuk menambahkan informasi tambahan, Dalam cepat kami memiliki cara baru untuk menggunakannya ??
.
let imageObject: UIImage = (UIImage(named: "ImageName")) ?? (initialOfUsername.capitalizedString).imageFromString
Yang mirip dengan
int a = 6, c= 5;
if (a > c)
{
a is greater
} else {
c is greater
}
setara dengan
if (a>c)?a:c
==> Sama dengan if (a>c)?:c
alih-alih ?:
kita bisa menggunakan ??
swift.