2016-03-20 4 views
0

Привет, есть ли какие-либо изменения для написания статического расширения в Swift, как в C#? Я имею в виду в C# я могу написать то же самое, как это:быстрое статическое расширение, например C#

public static class MyExtensions 
{ 
    public static int WordCount(this String str) 
    { 
     return str.Split(new char[] { ' ', '.', '?' }, 
         StringSplitOptions.RemoveEmptyEntries).Length; 
    } 
} 

и назвать его так:

var s = ""; var x = s.WordCount(); 

Я знаю, что я могу сделать то же самое в быстры, но она работает только по типам классов. На статических типов я должен написать что-то вроде:

var str:String? 
let s = String.IsNilOrEmpty(str) 

для этого расширения:

extension String { 
    static func isNilOrEmpty(str: String?) -> Bool{ 

     if str == nil { 
      return true 
     } 

     if str!.isEmpty{ 
      return true 
     } 

     return false 
    } 
} 

Есть ли изменить называть это так:

let s = str.IsNilOrEmpty() 

Спасибо за помощь или выгоняя на правильно.

+0

Проблема заключается в том, что 'str' является необязательным, поэтому вам необходимо определить расширение для параметра Дополнительно. –

+0

Вы можете просто бросить это на площадку, чтобы посмотреть, работает ли она. – ryantxr

+0

Я попробовал его на игровой площадке, но с этим результатом. Если я использовал статическое расширение, я могу вызвать это расширение на необязательный тип с этим стилем 'let some = String.isNilOrEmpty (someOptional)' или со статическим удаленным я могу сделать 'let some = someOptionalString.IsNilOrEmpty()'. Но я ищу вариант, чтобы вызвать его в обеих ситуациях одинаково (как в моем втором примере). Если есть такая опция. –

ответ

0

Вы можете определить функции с одним и тем же именем, одно статическое, одно не статическое.

extension String { 
    static func myfunc() -> String { 
     return "static" 
    } 
    func myfunc() -> String { 
     return "func" 
    } 
} 

let s3 = "" 
print(s3.myfunc()) // output = "func" 
print(String.myfunc()) // output = "static" 

В этом случае, если «someOptionalString» равно нулю, то оно не будет вызывать функцию.

let some = someOptionalString.IsNilOrEmpty() 
+0

Спасибо, теперь я знаю, что я не могу назвать статическое расширение неинициализированным типом. –

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