gpt4 book ai didi

ios - 如何在 objective-c 中初始化对象数组,类似于 swift

转载 作者:可可西里 更新时间:2023-11-01 01:29:03 25 4
gpt4 key购买 nike

我是新的 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 中执行此操作:

#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

如何创建存储多个玩家对象的玩家对象数组?

最佳答案

推荐:

使用类型化数组 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 对象。

关于ios - 如何在 objective-c 中初始化对象数组,类似于 swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39892680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com