[英]How to init array of objects in objective-c, similar to swift
我是新的 iOS 開發人員。 我開始學習 Swift,但我想切換到 Objective-C。 下面是我在 Swift 中使用的代碼
我有Player.swift
:
import Foundation
import UIKit
struct Player {
var name: String!
var game: String!
var rating: Int
init(name:String?, game:String?, rating:Int) {
self.name = name
self.game = game
self.rating = rating
}
}
我有一個類存儲數據 Player 對象數據,並且該數據在項目中隨處使用:
import Foundation
let playerData = [
Player(name: "Bill Evan", game: "call of duty", rating: 4),
Player(name: "Linh Nguyen", game: "Alien vs predator", rating: 3)
]
我的問題是如何在 Objective-C 中做到這一點:
我試圖在Player.h
做到這Player.h
:
#import <Foundation/Foundation.h>
@interface Player : NSObject
@property(nonatomic, strong) NSString *name;
@property(nonatomic, strong) NSString *game;
@property int rating;
-(id)initWithPlayer:(NSString *)name
game:(NSString*)game
rating:(int)rat;
@end
在Player.m
:
#import "Player.h"
@implementation Player
-(id)initWithPlayer:(NSString *)name game:(NSString *)game rating:(int)rating {
self.name = name;
self.game = game;
self.rating = rating;
return self;
}
@end
如何創建存儲許多玩家對象的 Player 對象數組?
使用類型化數組NSArray<Player *>
以便您在訪問它時不必NSArray<Player *>
轉換元素,如果您嘗試插入非Player
對象,編譯器會警告您。
NSArray<Player *> *players = @[
[[Player alloc] initWithPlayer:@"Steven" game:@"Pokémon Go" rating:100],
[[Player alloc] initWithPlayer:@"Mike" game:@"Pokémon Silver" rating:90]
];
Player *steven = players[0];
steven.rating = steven.rating + 1;
如果你只是這樣做
NSArray *players = @[ ... see above ... ];
你必須像這樣投
Player *steven = (Player *)players[0];
這也更危險,因為編譯器也允許你這樣做:
NSArray *players = @[
[[Player alloc] initWithPlayer:@"Steven" game:@"Pokémon Go" rating:100],
@"Just a String, not a Player object"
];
當您將@"Just a String, ..."
對象 ( players[1]
) 轉換為 Player 對象時,這顯然會導致運行時崩潰。
要回答這個問題,您可以使用以下兩種方法之一在 Objective-C / Foundation 中初始化對象數組:
// Original, longer way of doing it
NSArray *words = [NSArray arrayWithObjects:@"list", @"of", @"words"];
// Modern Objective-C shorthand
NSArray *words = @[@"list", @"of", @"words"];
有點冗長,但考慮到您的對象,以下是您的 Swift 代碼:
let playerData = [
Player(name: "Bill Evan", game: "Call of Duty", rating: 4),
Player(name: "Linh Nguyen", game: "Alien vs. Predator", rating: 3)
]
會在Objective-C中查看:
NSArray *playerData = @[
[[Player alloc] initWithPlayer:@"Bill Evan" game:@"Call of Duty" rating:4],
[[Player alloc] initWithPlayer:@"Linh Nguyen" game:@"Alien vs. Predator" rating:3]
];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.