所以我有一个typealias元组
public typealias MyTuple<T> = (key: T, value: String)
在我的ViewController中,我想用通用数据类型声明一个MyTuple数组,因为我还不知道键的类型。但是,从this开始,Swift中不可能有泛型变量。还有其他解决方法如下,但我不喜欢它们中的任何一个。谁有更好的想法?
class ViewController: UIViewController {
var array1 = [MyTuple<T>]() // compile error of course
var array2 = [MyTuple<Any>]() // no point as I'd use `Any` for MyTuple
func getArray<T>(array: Array<MyTuple<T>>) -> Array<MyTuple<T>> {
return array // not a good approach
}
}
答案 0 :(得分:2)
您可以使用数组声明的协议和不依赖于键的数据类型的基本方法执行类似的操作:
protocol KeyValueArray
{
associatedtype KeyType
var array:[(key:KeyType,value:String)] { get set }
}
extension KeyValueArray
{
var array:[(key: KeyType, value:String)] { get {return []} set { } }
}
class ViewController:UIViewController,KeyValueArray
{
// assuming this is like an "abstact" base class
// that won't actually be instantiated.
typealias KeyType = Any
// you can implement base class functions using the array variable
// as long as they're not dependent on a specific key type.
}
class SpecificVC:ViewController
{
typealias KeyType = Int
var array:[(key:Int,value:String)] = []
}
我假设,在某些时候,视图控制器子类的具体实例将具有键的实际类型
答案 1 :(得分:1)
我认为解决这个问题的通常方法是将依赖关系链中的类型决策“推”到视图控制器:
def stringSplitter(string):
words = []
current_word = ""
for char in string:
if char == " ":
words.append(current_word)
current_word = ""
else:
current_word += char
words.append(current_word)
return words
这是有道理的,因为您可能会将控制器视为“foo控制器”,其中“foo”是Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 6);
calendar.set(Calendar.MINUTE, 0);
int interval = 1000 * 60 * 60 * 24;
Intent myIntent = new Intent(yourActivity.this, ScheduleNotification .class);
pendingIntent = PendingIntent.getBroadcast(UserDashBoardActivity.this, 0, myIntent,0);
/* Repeating on every 24 hours interval */
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pendingIntent);
的具体值。 (“宠物控制器”,“产品控制器”等)但当然,在知道具体类型之前,不能创建数组实例。