簡體   English   中英

如何在objective-c中初始化對象數組,類似於swift

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM