podfile文件用到的Ruby语言的学习和使用
序言
在我們的iOS開發中,現在的cocoapods已經是事實上的添加第三方庫的標準方式了.在cocoapods中的podfile文件就是利用Ruby語言寫的一款DSL(Domain Specific Language,領域特定語言).
Ruby簡介
在Ruby的維基百科Ruby(翻墻才能訪問)上的說明:Ruby 是一種面向對象、命令式、函數式、動態的通用編程語言。 在20世紀90年代中期由日本電腦科學家松本行弘(Matz)設計并開發。 遵守BSD許可證和Ruby License。 它的靈感與特性來自于Perl、Smalltalk、Eiffel、Ada以及Lisp語言。
在Ruby中,一切都是對象,連在其它語言中的基本類型在Ruby中都是對象.例如對于數字1 ,它也是對象,我們可以 1.methods 來調用1這個對象的methods方法,它沒有所謂的運算的概念,1+1其實是1.+(1)就是1這個對象的+方法
在MAC系統中,已經內置了Ruby了,所以我們不需要額外安裝就可以使用.
這里有兩個在線運行Ruby的網頁,在我們只想驗證一些簡單的Ruby調用的時候,比較方便w3cschool Ruby
常用結構的語法
字符串
用雙引號"字符串內容",這種方式創建的字符串中可以通過 #{變量/表達式}的方式來嵌入表達式.在生成的時候,這個表達式會被計算
例如
單引號’字符串內容’來創建字符串
符號
這玩意,相對于其他語言來說是比較特別的,在Ruby中,字符串是個對象,定義的兩個字符串"a" 和另一個地方定義的"a",其內存地址是不一樣的,這個在我們的OC中,它是常量字符串,會被系統直接存放在常量區,他們的地址啥的都是一樣的.
但在Ruby中,是不同的.那怎么實現OC中那樣的常量字符串呢? 在Ruby中就是 符號!!! 創建一個 Symbol 對象的方法是在名字或者字符串前面加上冒號:
數組
常用的創建數組的方式有 語法糖[] 和 Array.new
nums = [1,2,3,4,5] p nums #=> [1,2,3,4,5] a = Array.new p a #=> [] a = Array.new(5) p a #=> [nil,nil,nil,nil,nil] a = Array.new(5,0) p a #=> [0,0,0,0,0]new方法的第一個參數是個數,第二個參數是默認值,如果沒有,則元素都會被初始化為nil.
通過 []索引來獲取數組,同OC等語言不同的是,這里的索引值可以是負數,負數表示從數組尾部開始獲取元素 ,還可以超過數組的大小,只是這個時候,會返回nil,所以在Ruby中就沒有所謂的越界的概念了
nums = [1,2,3,4,5] puts nums[2] #=> 3字典/散列
在Ruby中,叫法是散列,對應的就是OC中的字典(NSDictionary)
創建的方式 ,直接使用 {鍵 => 值,|鍵 => 值|} ,當然了,如果用符號做鍵,可以用 {鍵: 值,|鍵 : 值|}
另一種方式是Hash.new
h = Hash.new; h["key1"] = "1" p h["key1"] #=> "1"條件判斷
語法格式
if 條件 then處理 end #其中的then可以省略還有帶有多個else的
if 條件 then處理 elsif 條件 then處理 else 處理 end # 其中的then也是可以省略的在Ruby中,還多了個和if相對的unless.if的條件是滿足就執行,unless是條件不滿足就執行
也就是 unless其實相當于 if !條件
case 語句
case 比較對象 when 值1 then處理1 when 值2 then處理2 else 處理3 end方法/函數定義
def funName(parm1,parm2 ,.....)函數體 end舉個實際的例子
def subDirctory(rootDirectPath)subArr = []Dir::foreach rootDirectPath do |filename| if filename != "." and filename != ".." and !filename.start_with?(".")sub = "#{rootDirectPath}/#{filename}"if File.directory?(sub) puts "#{sub} is directory"subArr << filenameend endendreturn subArr end#獲取xcodeproj文件路徑和target def projectInfo(projectArr,prefix)projects = []projectArr.each { |subDirect|modulesProjs = Dir.glob("#{subDirect}/*.xcodeproj") projects << modulesProjs}projects.each { |project|projectName = File.basename project, extnputs projectName} endpath = "./xcodeproj-1.6.0" subArr = subDirctory(path) puts subArr從這個實際例子,我們可以知道, 方法的調用 方法名(參數)的方式.這里的括號是可以省略的!!!
也就是
當然了,函數還可以帶上默認值等等,在此不再贅述.
記錄的一些小內容
輸出一個對象支持的方法
p project_reference.methods methods方法,可以輸出一個對象能夠支持的所有的方法打印日志到控制臺
print –不會換行 puts –會換行打印對象的類型
puts project_reference.class在ruby中,可能會看到如下的方法
products_group.children << ref
這個是普通的方法 <<,默認一般都是給數組添加一個到末尾
ruby中引入其它的庫,或者文件,類似于inclue
require_relative 'generator/render’這個是在當前目錄下尋找某個rb文件!
ruby中,對于一個數組,有 map,collect,select,reject四個方法,這四個方法,在帶有block的時候,可以用來返回一個新的數組,這個數組是block中方法的執行結果
例如
這里是要取數組中class是PBXFrameworksBuildPhase的數組,然后取第一個
ruby中優雅的幾個符號:
||=
@foo ||= 1 的意思是,如果 foo 屬性還沒賦值,則賦為1,否則保留原來的值。這在一些“如果你不給我個初始值,我就算出一個初始值”的地方會很有用
像數組用這個就很方便
意思是 如果.build_settings[‘HEADER_SEARCH_PATHS’]這個數組中有值,那么就保留原來的,沒有的話,就賦值為 "$(inherited) “
<<
config.build_settings['HEADER_SEARCH_PATHS'] << "yohunl/cddr/path”意思是追繳,相當于調用數組的append方法!!
總結
以上是生活随笔為你收集整理的podfile文件用到的Ruby语言的学习和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ltp词性标注
- 下一篇: xp系统计算机蓝屏,xp系统电脑一直蓝屏