2015-10-12 2 views
0

У меня есть два класса, и я хотел бы получить переменную со значением (переменная в функции) ко второму классу:Swift Получить значение из функции

public class StreamPlayer { 

    class var sharedInstance : StreamPlayer{ 
     struct Static { 
      static let instance : StreamPlayer = StreamPlayer() 
     } 
     return Static.instance 
    } 

    public var intermediate = NSString() 

    func metaDataUpdated(metaData : NSString){ 
     var result : String = "" 
     var listItems = metaData.componentsSeparatedByString(";") as [String] 
     if (listItems.count > 0){ 
      var containerName = listItems[0] 
      result = "StreamTitle=\'([^\"]*)\'".matchesForRegexIn(containerName, atRangeIndex: 1) 

      self.intermediate = result 
     } 

    } 
} 

и второго класса

class RadioViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     println(test + StreamPlayer.sharedInstance.intermediate) 
    } 
} 

проблема заключается в том, что переменная промежуточном не изменяется и не получить значение результата (в моем первом классе)

+0

Вы уверены, что listItems.count> 0? – neo

+0

Вы никогда не вызываете функцию 'metaDataUpdated'. – GriffeyDog

+0

Да, я уже распечатал результат, и он получил то, что я хочу, проблема заключается в том, чтобы скопировать результат в промежуточный, – matheo972

ответ

1

Я скопировал свой код класса StreamPlayer в игровую площадку. Я только закомментировал matchesForRegexIn метод, как это кажется, что это ваш добавочный номер строки так что мой код выглядит следующим образом:

public class StreamPlayer { 

    class var sharedInstance : StreamPlayer{ 
    struct Static { 
     static let instance : StreamPlayer = StreamPlayer() 
    } 
    return Static.instance 
    } 

    public var intermediate = String() 

    func metaDataUpdated(metaData : NSString){ 
    var result : String = "" 
    let listItems = metaData.componentsSeparatedByString(";") as [String] 
    if (listItems.count > 0){ 
     // var containerName = listItems[0] 
     result = "StreamTitle=\'([^\"]*)\'" //.matchesForRegexIn(containerName, atRangeIndex: 1) 
     intermediate = result 
    } 
    } 
} 

// calling the method to make sure intermediate gets updated 
StreamPlayer.sharedInstance.metaDataUpdated("asd") 
// check if it got updated 
print(StreamPlayer.sharedInstance.intermediate) 

Последняя строка выводит StreamTitle = \ '([^ \ "]) \ «*, так что все хорошо. Просто убедитесь, что позвонить StreamPlayer.sharedInstance.metaDataUpdated перед проверкой промежуточного

PS. Я действительно не уверен, что вы пытаетесь достичь путем обмена промежуточных результатов из функции к внешнему миру, но он чувствует. о расщеплении metaDataUpdated метод в два метода может быть?

PPS. metaDataUpdated - действительно плохое имя для функции

PPPS. Если бы я был вами, я бы объявил промежуточным, как String?

0

self.intermediate является NSString, а результат является строкой

Попробуйте

self.intermediate = result as NSString 
+0

Я пробовал, но он не работает: / – matheo972

Смежные вопросы